MFC LoadStringW是不是从字符串表正确加载日语字符串
在我的MFC应用程序,字符集设置为“多字节”,我试图加载一个日语字符串存储在字符串表使用LoadStringW函数加载字符串表中的字符串,但它总是读取垃圾字符。MFC LoadStringW是不是从字符串表正确加载日语字符串
您看到我的方法有问题吗?
我不想将字符集更改为Unicode。
另一个有趣的事情是,我创建了另一个示例应用程序,并将主项目中的一个日文字符串粘贴到新示例应用程序的字符串表中,然后尝试使用LoadStringW加载日文字符串,然后运行(字符集是示例应用程序的Multibyte )
WCHAR wBuf[1024];
int rc;
// load the string from resource file into a wide character array.
rc = LoadStringW(hInstance,iResourceID, wBuf, 1024);
确保保存资源文件utf-16格式,而不是ANSI。 Visual Studio可以很好地处理这些文件。
要这样保存,请在Visual Studio中以文本形式打开文件。然后在文件菜单中选择Advanced Save Options
,然后在对话框中指定Unicode - Codepage 1200
。
然后再次保存该文件。
之后,您的资源字符串将按预期工作。
+1。日文字符串在字符串表编辑器和普通文本文件中正确可见。需要在WideCharToMultiByte上工作,因为它将日文字符转换为'???'根据MSDN, – Rahul
,1200只是托管.Net中的有效代码页 –
字符串资源总是存储在UNICODE中,所以我不认为字符集项目设置是这里的罪魁祸首。你能用调用'LoadStringW()'的代码更新你的问题吗? –
感谢您发布代码。它看起来很好,但是你在调用之后是否检查了'rc'是否为非零? –
呼叫后'rc'不为零。还有一种观察是,字符串表视图(行视图)中的日语字符显示垃圾字符,但如果您在记事本++中打开相同的文件,则它会显示正确的日语字符串。 – Rahul