Выводит ли консоль Windows символы из кодовой страницы локали, но не из кодовой страницы, возвращаемой функцией GetConsoleOutputCP?

#c #windows #mingw

Вопрос:

Вот простой код для начала:

 #include lt;stdio.hgt; #include lt;locale.hgt; #include lt;windows.hgt;  int main () {  unsigned char str [3];   printf ("LC_ALL:tt%sn", setlocale (LC_ALL, ""));  printf ("LC_TYPE:t%sn", setlocale (LC_CTYPE, ""));   printf ("Input CP:t%dn", GetConsoleCP ());  printf ("Output CP:t%dnn", GetConsoleOutputCP ());   str [0] = getchar ();  str [1] = getchar ();  str [2] = getchar ();   printf ("%d %d %dn", str[0], str[1], str[2]);  printf ("%c %c %cn", str[0], str[1], str[2]);   return 0; }  

Возвращенная локаль и кодировка представлены на рисунке. Допустим, я ввожу небольшую строку: «пр», затем нажимаю enter. То, что я ожидаю, — это коды от OEM 866, кодирующие «п» и «р», затем 10, указывающие в конце строки, поэтому выходные коды «175 224 10» — потому что кодировка ввода консоли 866, как возвращено GetConsoleCP () . И я получаю то, что ожидаю.

Вывод на консоль

Затем я пытаюсь вывести эти символы на консоль. Я ожидаю, что на входе будут те же символы, потому что, как указано в » GetConsoleOutputCP ()», кодировка вывода равна 866. То, что я получаю,-это символы из кодировки Windows-1251, которая возвращается setlocale функцией.

Итак, выводит ли консоль Windows символы из кодовой страницы локали, но не из кодовой страницы, возвращаемой GetConsoleOutputCP () функцией?