Могут ли быть проблемы, связанные с кодировкой, при хранении строк Unicode в INI-файлах? - PullRequest
1 голос
/ 20 октября 2010

Уже есть вопросы, касающиеся Unicode и INI-файлов, но многие из них являются скорее доменными. Поэтому я не уверен, что ответ может быть применен к общему делу.

Мотивация : я хочу использовать ini-файлы для хранения простых данных, таких как некоторые числа и строки. Строки предоставляются пользователями (ввод через GUI). Программное обеспечение может работать в любой точке мира, любой язык может быть использован. Файлы также могут быть разделены между пользователями (чтобы их можно было записывать в одной системе, читать в другой и т. Д.).

Я полагал, что при использовании GetPrivateProfileStringW и WritePrivateProfileStringW у юникода в файлах ini не должно быть проблем (я нацеливаюсь на системы> = Windows XP).

Но потом я наткнулся на ответ в на этот вопрос .

Цитата:

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

Я сейчас неуверен - нужно ли беспокоиться? Или я могу просто использовать ini-файлы?

Изменить:

Кажется, ключом к тому, чтобы избежать случайных кодировок, может быть подготовка пустого файла, содержащего спецификацию, а затем использование этого файла. Кто-нибудь (положительный / отрицательный) опыт с этим?

Ответы [ 2 ]

2 голосов
/ 20 октября 2010

Проблема на самом деле не в использовании файлов ini, а в функциях, которые вы будете использовать для чтения и записи в эти файлы.

Как вы заметили, WritePrivateProfileStringW() не будет записывать UNICODE данные в файл. Вместо этого он будет использовать любую многобайтовую кодировку, стандартную для системы. Это означает, что ini файлы, созданные в японской системе, не будут доступны для чтения в русской системе. Обратное также верно.

Если файлы не предназначены для совместного использования системами с разными кодировками, все будет в порядке. В противном случае, возможно, вам следует использовать не ini файлы, а более UNICODE -защищенную технологию, например, например. XML , кодировка которого по умолчанию UTF-8 на всех платформах.

1 голос
/ 22 февраля 2012

Ответ: да, могут быть проблемы в зависимости от того, существует ли файл и (если он существует), как его содержимое закодировано.

INI-файл рассматривается как Unicode, если его содержимое ужеUnicode.Внутренне это, кажется, определяется функцией IsTextUnicode .И для этой функции правильная спецификация в файле служит большим намеком на Unicode.Поэтому, просто используя WritePrivateProfileStringW, вы не можете гарантировать запись Unicode в ini-файл, вместо этого вам нужно подготовить файл.

Источник: Блог Майкла Каплана

...