c++ 无法将CStringW转换为CStringA

yftpprvb  于 2023-01-03  发布在  其他
关注(0)|答案(1)|浏览(224)

我正在做一个项目,在这个项目中,我遇到了一个问题,那就是将多字节字符串(如日语)的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吗?提前感谢。

kiz8lqtg

kiz8lqtg1#

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 Package 器)。如果您遵循此API文档,您可以找到several "code page" values(即编码)。

相关问题