Visual C ++-UTF-8-CA2W,然后是带有MBCS的CW2T-可能是个坏主意吗?

时间:2019-03-13 09:57:30

标签: c++ utf-8 mbcs

我正在使用一个生成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. 我的应用程序是使用使用多字节字符集
  3. 编译的

1 个答案:

答案 0 :(得分:1)

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

使用原始指针(const char*或类似CStringstd::string的字符串类将字符串作为UTF-8传递。当您实际上需要渲染用于显示的字符串时,请转换为Unicode并显式使用W API。

例如:

void UpdateDisplayText(const char* s)
{
    CStringW ws = CA2W(s, CP_UTF8);
    SetDlgItemTextW(m_hWnd, IDC_LABEL1, ws);
}