使用API​​ WideChartoMultibyte将日语字符从宽字符转换为多字节给出'????'

时间:2011-10-12 07:29:52

标签: c++ windows unicode mfc widechar

在我的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 个答案:

答案 0 :(得分:5)

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

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

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

答案 1 :(得分:1)

  

是。我使用VS 2010'高级保存选项'保存了RC文件 - >'Unicode -   代码页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