#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 ()
функцией?