无法将CStringW转换为CStringA

时间:2014-02-26 09:31:54

标签: c++ string mfc cstring mbcs

我正在开展一个项目,在这个项目中我遇到了将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? 提前谢谢。

1 个答案:

答案 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(即编码)。