Как читать / записывать китайские / японские символы из / в INI-файлы? - PullRequest
2 голосов
/ 15 октября 2008

Использование WritePrivateProfileString и GetPrivateProfileString приводит к ??? вместо реальных персонажей.

Ответы [ 4 ]

5 голосов
/ 11 января 2012

GetPrivateProfileString() и WritePrivateProfileString() будут работать с Unicode, вроде.

Если ini-файл имеет кодировку UTF-16LE, т. Е. Имеет спецификацию UTF-16, то функции будут работать в Unicode. Однако если функции должны создать файл, они создадут файл ANSI и будут работать только в ANSI.

Таким образом, чтобы использовать функции с Юникодом, создайте свой INI-файл перед первым использованием и запишите в нем метку порядка байтов UTF-16LE. Затем продолжайте как обычно.

Обратите внимание, что функции вообще не работают с UTF-8 .

См. блог Майкла Каплана для более подробной информации, чем вы когда-либо хотели знать об этом.

2 голосов
/ 22 апреля 2009

Функция WritePrivateProfileStringW запишет файл INI в устаревшей системной кодировке (например, Shift-JIS в японской системе), потому что это устаревшая функция поддержки. Если вы хотите иметь полностью INI-файл с поддержкой Unicode, вам нужно будет использовать внешнюю библиотеку.

Попробуйте SimpleIni http://code.jellycan.com/simpleini/

Это C ++, файл с одним заголовком, библиотека шаблонов с лицензией MIT (то есть коммерческое использование в порядке). Включите его в свой исходный файл и используйте его. Он кроссплатформенный, поддерживает UTF-8 и устаревшие кодированные файлы и может считывать и записывать INI-файл, в основном сохраняя комментарии и структуру и т. Д. Проще всего проверить страницу.

Это было некоторое время и, похоже, используется многими людьми. Я написал это и продолжаю поддерживать.

1 голос
/ 15 октября 2008

Согласно документации WritePrivateProfileString существует версия Unicode: WritePrivateProfileStringW. Используйте это, и вы сможете использовать символы Юникода.

0 голосов
/ 15 октября 2008

Это может быть просто проблема с отображением или обработкой строк. Например, обычное консольное окно не может отображать японские строки с printf.

Можете ли вы опубликовать часть своего кода?

...