1. Я имел в виду Билдер 3 (1998г) - я не работаю в среде Борланда, поэтому, что у меня "завалялось", на том, я и проверил ;). А программа обычная - "Привет мир !". ;)
З.Ы : Штраф мой (нечаяно) ;)
ЗЗЫ: Более развернутый ответ дать не успеваю (тороплюсь) - но насколько я понимаю он и не нужен, и так все понятно .
[C++] Как в консольном приложении вывести строку на русском языке ?24.04.02 11:52 Штраф: 15 [KMiNT21] Автор: blade Статус: Незарегистрированный пользователь
Сделай в ФАРе два файлика, в одном русский алфавит написанный в кодировке винды, во втором - доса потом из программы их спокойно читаешь и юзаешь что нить вроде...
void __fastcall formout(char *str)
{
char *strx=(char *)malloc(strlen(str)+1);
strcpy(strx,str);strx[strlen(str)]=0;
for(int i=0;i<strlen(str);i++)
{
char ch=str[i];
if(strrchr(&tab1[0],ch)!=NULL){ch=tab2[(strrchr(&tab1[0],ch)-&tab1[0])];}
strx[i]=ch;
}
printf(strx);
}
где tab1 - из файлика в кодировке WIN - а tab2 - DOS
[C++] А в чем проблема?? Разве что кодировка другая, и все.24.04.02 14:08 Автор: KMiNT21 <http://blog.kmint21.com> Статус: Member
Это под Линухом удообно в одном редакторе набивать, а потом мэйком компилить. А под виндами, знаешь ли, сидишь себе спокойно в ДевСтудио и о других редакторах не думаешь. В том то и фигня, что среда - компилер (раз там такая супер пупер интеграция) должна сама кодировочку правильную подставить. А не ставит... падла :)
А ты бы шрифт выставил другой... (не помню как он точно называется).. Там DOS кодировка будет.25.04.02 15:47 Автор: KMiNT21 <http://blog.kmint21.com> Статус: Member
> Это под Линухом удообно в одном редакторе набивать, а потом > мэйком компилить. А под виндами, знаешь ли, сидишь себе > спокойно в ДевСтудио и о других редакторах не думаешь. В > том то и фигня, что среда - компилер (раз там такая супер > пупер интеграция) должна сама кодировочку правильную > подставить. А не ставит... падла :)
Не должен компилятор/препроцессор/IDE кодировки менять (не их это дело ). Это должен делать сам программер, например через эти API:
1. А что борланда консольки правильно выводят русскую кодировку ?
2. Если посмотреть внутрь кодировок, то оказывается, что VC 6 правильно определяет кодировку (русскую, под Windows), проблема уже в оси, которая или внутренне неправильно выводит кодировку, или же не имеет шрифт для правильного отображения кодировки, а поэтому использует "заменитель".
3. Еще можно добавить, что выводить в Windows консольное окно DOS-ую кодировку (что происходит сейчас и под что делается попытка "подогнать ответ") - ненормально, а посему п.2. имеет право на существование.
> 1. А что борланда консольки правильно выводят русскую > кодировку ? Ты про компилятор Борланда под ДОС? Дык Win32-консольное и ДОС-приложение это же разные вещи. Для ДОС-прог cp866 родная.
> 2. Если посмотреть внутрь кодировок, то оказывается, что VC > 6 правильно определяет кодировку (русскую, под Windows), > проблема уже в оси, которая или внутренне неправильно > выводит кодировку, или же не имеет шрифт для правильного > отображения кодировки, а поэтому использует "заменитель". В ОС проблемы нет. Это у нее ее фича :)
Консольные API типа WriteConsole используют текущую кодовую страницу консоли, которая по умолчанию OEM DOS(866) (для совметсимости наверное).
> 3. Еще можно добавить, что выводить в Windows консольное > окно DOS-ую кодировку (что происходит сейчас и под что > делается попытка "подогнать ответ") - ненормально, а посему > п.2. имеет право на существование. Для NT/2K есть нормальный способ - SetConsoleOutputCP(1251) и выводи текст в ANSI кодировке. RTFM короче :)
1. Имеется в виду (разумеется) не DOS-борланд. Более того, я прежде чем высказать такое мнение проверил версию - на чем смог ...
2. В ОС проблемы может и нет, но может и есть ... Насчет фичи - откуда такие мысли ...
3. Вопрос не стоит в том, возмножен ли вывод "на русском" в консоль - здесь написать свою функцию перекодировки не займет больше получаса, вопрос в том, что VC 6 компилирует код в расчете на 1251 (или его модификацией) кодировку, а windows выводит его как 866 (или его модификацией) ...
> 1. Имеется в виду (разумеется) не DOS-борланд. Более того, > я прежде чем высказать такое мнение проверил версию - на > чем смог ... Я так и не понял, какой ты Борланд имеешь ввиду :)
Можно поподробнее (привести код и версию компилятора)?
Я тоже ради интереса проверил на BC 5.0 - результат такой же как и в VC 6.0
> 2. В ОС проблемы может и нет, но может и есть ... Насчет > фичи - откуда такие мысли ... Все мысли из MSDN :)
WriteConsole Windows NT: This function uses either Unicode characters or 8-bit characters from the console's current code page. The console's code page defaults initially to the system's OEM code page. To change the console's code page, use the SetConsoleCP or SetConsoleOutputCP functions, or use the chcp or mode con cp select= commands.
> 3. Вопрос не стоит в том, возмножен ли вывод "на русском" в > консоль - здесь написать свою функцию перекодировки не > займет больше получаса, вопрос в том, что VC 6 компилирует > код в расчете на 1251 (или его модификацией) кодировку, а естественно - в какой кодировке файл дают компилятору, в такой он его и компилит. Не может же он кодировку менять :))
> windows выводит его как 866 (или его модификацией) ... Точнее windows выводит его в console's current code page
1. Я имел в виду Билдер 3 (1998г) - я не работаю в среде Борланда, поэтому, что у меня "завалялось", на том, я и проверил ;). А программа обычная - "Привет мир !". ;)
З.Ы : Штраф мой (нечаяно) ;)
ЗЗЫ: Более развернутый ответ дать не успеваю (тороплюсь) - но насколько я понимаю он и не нужен, и так все понятно .
[c++] всем большое спасибо.26.04.02 14:25 Автор: blade Статус: Незарегистрированный пользователь
> Не должен компилятор/препроцессор/IDE кодировки менять (не > их это дело ). Это должен делать сам программер...
В принципе согласен. Черт... а функции то я эти применял... но за х.з. сколько лет не додумался использовать их для вывода текста в консоли... ёёёёё... пойду повешусь.