При преобразовании многобайтового консольного приложения в Unicode я столкнулся со странной проблемой, когда _tcprintf
и WriteConsole
работали нормально, но _tprintf
печатал неправильные символы ...
Я проследил это до использования setlocale(LC_ALL, "C")
, которое использует LC_CTYPE
из 1 байта на основе MS doc:
Языковой стандарт C предполагает, что все типы данных char имеют размер 1 байт и что их значение всегда меньше 256.
Однако, Я хочу сохранить "C"
для всего, кроме LC_CTYPE
, но я не знаю, что использовать?
Я думал, что весь смысл использования UTF16 заключается в том, что все символы доступны, и все будет печататься правильно, независимо от кодовой страницы или локали.
Несмотря на то, что в приложении Unicode также отображается настройка вывода на консоль UTF-8 (65001) (SetConsoleCP
, которая, конечно, не связана с локалью), и при выводе UTF16 также возникают проблемы с отображением правильных символов.
В любом случае, кто-нибудь знает, какое значение я должен использовать LC_CTYPE
для UTF16 в консольном приложении Windows Unicode? Может быть, это так же просто, как setlocale( LC_CTYPE, "" );
? ТИА !!