4

我正在做一个项目,在该项目中我遇到了一个问题,即转换CStringWCStringA多字节字符串(如日语)。

我正在使用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()了。

谁能告诉我如何转换CStringWCString?提前致谢。

4

1 回答 1

6

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 的CodePage内容(请注意,CW2A它本质上是一个方便的安全 C++ RAII 包装器围绕此 API)。如果您遵循此 API 文档,您可以找到几个“代码页”(即编码)。

于 2014-02-26T09:43:35.967 回答