Происходит потому, что "импортные редиски" толком не доделали работу с локалью. Им кириллица не нужна. Сам с этой бедой намучался. Но вроде как проблему удалось победить следующим образом:
char inbuff[128]; char *loc=setlocale(LC_ALL,"rus"); int origCP=GetConsoleCP();
SetConsoleCP(1251); gets(inbuff); // mess printf("%s\n",inbuff);
SetConsoleCP(origCP); printf("%s\nВсе хорошо !!!\n",inbuff);
SetConsoleCP(1251); gets(inbuff); // mess printf("%s\n",inbuff);
SetConsoleCP(origCP); printf("%s\nОпять все хорошо !!!\n",inbuff);
Метод проб и ошибок показал, что при считывании надо постоянно выставлять 1251, а при выводе - origCP=866. Очень, очень креативно. Там еще есть пара функций Get/Set ConsoleOutputCP. Но их воздействие на результат я не понял. Может в этом и есть какая нибудь логика, но я ее не смог установить. Кстати, а "setlocale()" почему-то все равно надо вызывать. Похоже на четное количество ошибок.
-- Пт дек 03, 2010 15:39:39 --
Происходит потому, что "импортные редиски" толком не доделали работу с локалью. Им кириллица не нужна. Сам с этой бедой намучался. Но вроде как проблему удалось победить следующим образом:
char inbuff[128]; char *loc=setlocale(LC_ALL,"rus"); int origCP=GetConsoleCP();
SetConsoleCP(1251); gets(inbuff); // mess printf("%s\n",inbuff);
SetConsoleCP(origCP); printf("%s\nВсе хорошо !!!\n",inbuff);
SetConsoleCP(1251); gets(inbuff); // mess printf("%s\n",inbuff);
SetConsoleCP(origCP); printf("%s\nОпять все хорошо !!!\n",inbuff);
Метод проб и ошибок показал, что при считывании надо постоянно выставлять 1251, а при выводе - origCP=866. Очень, очень креативно. Там еще есть пара функций Get/Set ConsoleOutputCP. Но их воздействие на результат я не понял. Может в этом и есть какая нибудь логика, но я ее не смог установить. Кстати, а "setlocale()" почему-то все равно надо вызывать. Похоже на четное количество ошибок.
-- Пт дек 03, 2010 15:41:10 --
Происходит потому, что "импортные редиски" толком не доделали работу с локалью. Им кириллица не нужна. Сам с этой бедой намучался. Но вроде как проблему удалось победить следующим образом:
char inbuff[128]; char *loc=setlocale(LC_ALL,"rus"); int origCP=GetConsoleCP();
SetConsoleCP(1251); gets(inbuff); // mess printf("%s\n",inbuff);
SetConsoleCP(origCP); printf("%s\nВсе хорошо !!!\n",inbuff);
SetConsoleCP(1251); gets(inbuff); // mess printf("%s\n",inbuff);
SetConsoleCP(origCP); printf("%s\nОпять все хорошо !!!\n",inbuff);
Метод проб и ошибок показал, что при считывании надо постоянно выставлять 1251, а при выводе - origCP=866. Очень, очень креативно. Там еще есть пара функций Get/Set ConsoleOutputCP. Но их воздействие на результат я не понял. Может в этом и есть какая нибудь логика, но я ее не смог установить. Кстати, а "setlocale()" почему-то все равно надо вызывать. Похоже на четное количество ошибок.
|