2

在我的 MFC 应用程序中,我正在从字符串表中读取日文字符,然后使用以下代码将其转换为多字节

WCHAR wBuf[1024];
int rc;

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

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

但是每个日文字符都被转换成'????' 我试图将代码页从 1252 更改为 1200 但没有帮助。

4

2 回答 2

5

Windows-1258是越南语文本的代码页。日语无法在越南语代码页中表示,因此输出映射为问号。1252 也是如此,它仅适用于西欧语言。

在 1200 的情况下,这不是一个真正的代码页:根据 MSDN,它仅可用于托管应用程序(即 .NET)。

我强烈建议直接使用 Unicode,但如果您绝对必须将其转换为多字节字符集,则需要一个支持日语的字符集,在这种情况下,Shift-JIS,代码页 932,是通常的代码页.

于 2011-10-12T07:38:54.593 回答
1

是的。我使用 VS 2010 'Advanced Save Options'->'Unicode - Codepage 1200' 保存了 RC 文件,我尝试在 WideCharToMultiByte 中使用 1200 代码页 '1200' 但仍然不行。

好吧,这只是部分技巧,实际上您需要为 .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
于 2011-10-12T07:49:14.213 回答