我正在开展一个项目,在这个项目中我遇到了将CStringW
转换为CStringA
以获取日语等多字节字符串的问题。
我使用LoadString()
方法从字符串资源加载字符串。
我尝试过以下代码,但似乎没有用。
CStringW csTest;
csTest.LoadString(JAPANESE_STRING);
CStringA Msg = CStringA(csTest); // Msg has been returned blank string
并且
std::string Msg = CW2A(csTest);// Msg has been returned blank string
我也试过了
wcstombs()
也是。
有谁能告诉我如何将CStringW
转换为CString
?
提前谢谢。
答案 0 :(得分:5)
CStringW
存储 Unicode UTF-16 字符串。
您对CStringA
的期望是什么编码?
您想要 UTF-8 吗? 在这种情况下,您可以:
// strUtf16 is a CStringW.
// Convert from UTF-16 to UTF-8
CStringA strUtf8 = CW2A(strUtf16, CP_UTF8);
在没有指定编码的情况下谈论CStringA
没有意义。
CW2A
的第二个参数是传递给WideCharToMultiByte()
Win32 API as CodePage
的内容(请注意CW2A
本质上是围绕此API的方便的安全C ++ RAII包装器)。如果您遵循此API文档,则可以找到several "code page" values(即编码)。