Преобразование японских символов из широких символов в многобайтовые с использованием API WideChartoMultibyte дает «????» - PullRequest
2 голосов
/ 12 октября 2011

В моем приложении MFC я читаю японские символы из таблицы строк, а затем преобразую их в многобайтовые, используя следующий код

WCHAR wBuf[1024];
int rc;

rc = LoadStringW(hInstance, iResourceID, wBuf, 1024);

WideCharToMultiByte(1252, WC_COMPOSITECHECK, wBuf, -1, buf, 1024, NULL, NULL);

Но каждый японский символ преобразуется в «????»Я пытался изменить кодовую страницу с 1252 на 1200, но без помощи.

Ответы [ 2 ]

5 голосов
/ 12 октября 2011

Windows-1258 - кодовая страница для вьетнамского текста.Японский не может быть выражен на вьетнамской кодовой странице, поэтому вывод сопоставляется с вопросительными знаками.То же самое касается 1252, это только для западноевропейских языков.

В случае 1200 это не настоящая кодовая страница: в соответствии с MSDN , она доступна только для управляемых приложений (т.е..NET).

Я бы настоятельно рекомендовал просто работать с Unicode напрямую, но если вам абсолютно необходимо преобразовать это в многобайтовый набор символов, вам понадобится тот, который поддерживает японский язык, в этом случае Shift-JISкодовая страница 932 - это обычная кодовая страница.

1 голос
/ 12 октября 2011

Да. Я сохранил RC файл, используя VS 2010 «Дополнительные параметры сохранения» -> «Юникод - Кодовая страница 1200 ', я пытался использовать 1200 кодовую страницу' 1200 'в WideCharToMultiByte, но по-прежнему нет.

Ну, это только отчасти уловка, вам нужно указать кодировку для данных в файле .rc следующим образом:

#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_JPN)
#ifdef _WIN32
LANGUAGE LANG_JAPANESE,SUBLANG_JAPANESE_JAPAN
#pragma code_page(932)
#endif

STRINGTABLE
BEGIN
   STR_ID "<Japanese text goes here>"
END

#endif
...