无法将CStringW转换为CStringA

A B*_*A B 4 c++ string mfc cstring mbcs

我工作的一个项目,我已经在转换的一个问题stucked CStringWCStringA像日语多字节字符串.

我正在使用LoadString()Method 从字符串资源加载字符串.我尝试过以下代码,但似乎没有用.

CStringW csTest;
csTest.LoadString(JAPANESE_STRING);
CStringA Msg = CStringA(csTest); // Msg has been returned blank string
Run Code Online (Sandbox Code Playgroud)

std::string Msg = CW2A(csTest);// Msg has been returned blank string
Run Code Online (Sandbox Code Playgroud)

我也试过 wcstombs()了.

任何人都可以告诉我如何转换CStringWCString?提前致谢.

Mr.*_*C64 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);
Run Code Online (Sandbox Code Playgroud)

谈论CStringA没有指定编码是没有意义的.

第二个参数CW2A是传递给WideCharToMultiByte()Win32 API的内容CodePage(注意,这CW2A本质上是围绕此API的方便的安全C++ RAII包装器).如果您遵循此API文档,您可以找到几个"代码页"(即编码).

  • “最佳实践”是您向自己澄清并在问题中_什么编码_您期望作为_“所需的输出”_,并相应地指定正确的“代码页”值。 (3认同)