#c #windows #string #unicode #mfc
#c #Windows #строка #юникод #mfc
Вопрос:
В моем приложении MFC для набора символов установлено значение «Многобайтовый», я пытаюсь загрузить японскую строку, хранящуюся в таблице строк, используя функцию LoadStringW для загрузки строки из таблицы строк, но она всегда считывает ненужные символы.
Вы видите какие-либо проблемы в моем подходе?
Я не хочу менять набор символов на Unicode.
Еще одна интересная вещь: я создал еще один образец приложения и вставил одну японскую строку из основного проекта в таблицу строк нового образца приложения, затем попытался загрузить японскую строку с помощью LoadStringW, после чего она работает (набор символов многобайтовый для примера приложения.)
WCHAR wBuf[1024];
int rc;
// load the string from resource file into a wide character array.
rc = LoadStringW(hInstance,iResourceID, wBuf, 1024);
Комментарии:
1. Ресурсы строк всегда хранятся в Юникоде, поэтому я не думаю, что здесь виноват параметр проекта набора символов. Можете ли вы обновить свой вопрос с помощью вызывающего кода
LoadStringW()
?2. Спасибо за публикацию кода. Это выглядит нормально, но вы проверили, что
rc
оно не равно нулю после вызова?3. Да, ‘rc’ не равен нулю после вызова. Еще одно замечание: японские символы в представлении таблицы строк (просмотр строк) показывают символы мусора, но если вы откроете тот же файл в notepad , он покажет правильные японские строки.
4. Ах, значит, символы уже повреждены в таблице строк, что объясняет, почему
LoadStringW()
появляется сбой (ввод мусора, вывод мусора). Я бы рискнул и сказал, что кто-то или что-то хранит японские символы в многобайтовой кодировке (возможно, Shift JIS или EUC-JP) непосредственно в таблице строк. Возможно, вам захочется скопировать и вставить правильные значения из Notepad в представление ресурсов, чтобы «исправить» проблему.5. Это происходит путем смешивания нескольких языков в RC-файле и не сохранения файла с правильной кодировкой, лучше иметь библиотеки DLL только для ресурсов для управления многоязычным приложением. [ссылка] support.microsoft.com/kb/198846
Ответ №1:
Убедитесь, что вы сохранили файл ресурсов в формате utf-16, а не ANSI. Visual Studio может обрабатывать эти файлы просто отлично.
Чтобы сохранить ее таким образом, откройте файл в Visual Studio как текст. Затем в меню file выберите Advanced Save Options
, а затем в диалоговом окне укажите Unicode - Codepage 1200
.
Затем сохраните файл снова.
После этого ваши строки ресурсов будут работать должным образом.
Комментарии:
1. 1. Японские строки корректно отображаются в редакторе таблиц строк и в обычных текстовых файлах. Необходимо работать с WideCharToMultiByte, поскольку он преобразует японские символы в символы типа ‘???’
2. согласно MSDN, 1200 является только допустимой кодовой страницей в управляемом .Net