1

我正在使用一个在const char*类型中生成 UTF-8 空终止字符串的库。示例包括:

MIGUEL ANTÓNIO
DONA ESTEFÂNIA

我想将这两种const char*类型转换为CString

MIGUEL ANTÓNIO
DONA ESTEFÂNIA

为此,我正在使用我制作的以下功能:

CString Utf8StringToCString(const char * s)
{
    CStringW ws = CA2W(s, CP_UTF8);
    return CW2T(ws);
}

该功能似乎做了我想要的(至少对于这两种情况)。但是,我想知道:使用 CA2W 宏,然后使用 CW2T 是否是个好主意?我这样做是在做某种有损转换吗?有什么我需要担心的副作用吗?

其他一些细节:

  1. 我正在使用 Visual Studio 2015
  2. 我的应用程序是使用使用多字节字符集编译的
4

1 回答 1

1

即使您的应用程序编译为 MBCS,您仍然可以毫无问题地使用 Unicode 字符串、缓冲区和 Windows Unicode API。

const char*使用原始指针 ( ) 或在字符串类(例如CStringor )中将字符串作为 UTF-8 传递std::string。当您确实需要渲染字符串以进行显示时,请转换为 Unicode 并W显式使用 API。

例如:

void UpdateDisplayText(const char* s)
{
    CStringW ws = CA2W(s, CP_UTF8);
    SetDlgItemTextW(m_hWnd, IDC_LABEL1, ws);
}
于 2019-03-13T10:53:26.303 回答