Вы используете стандартную функцию setlocale()
с категорией LC_CTYPE
(или LC_ALL
), чтобы установить отображение, которое библиотека использует между wchar_t
символами и многобайтовыми символами.Фактическое имя локали, переданное setlocale()
, определяется реализацией, поэтому вам нужно будет найти его в документации вашего компилятора.
Например, в MSVC вы можете использовать
setlocale( LC_ALL, ".1252" );
установить для среды выполнения C использование кодовой страницы 1252 в качестве многобайтового набора символов.Обратите внимание, что документы MSVC явно указывают, что языковой стандарт не может быть установлен в UTF-7 или UTF8 для многобайтовых наборов символов:
Набор доступных языков, кодов стран / регионов и кодовых страниц включает все этиподдерживается WinLS NLS API, за исключением кодовых страниц, для которых требуется более двух байтов на символ, таких как UTF-7 и UTF-8.Если вы предоставите кодовую страницу, такую как UTF-7 или UTF-8, setlocale завершится с ошибкой и вернет NULL.
«Широкий символ» wchar_t
тип предназначен для поддержки любого символаустановить поддержку системы - стандарт не определяет размер типа wchar_t
(он может быть как char
или любой из целочисленных типов большего размера).В Windows это «внутренняя» кодировка Unicode системы, то есть UTF-16 (UCS-2 до WinXP).Честно говоря, я не могу найти прямую цитату об этом в документах MSVC, хотя.Строго говоря, реализация должна вызывать это, но я не могу найти это.