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

标签 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. 我的应用程序是使用使用多字节字符集编译的

最佳答案

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

使用原始指针 (const char*) 或在诸如 CStringstd::的字符串类中将字符串作为 UTF-8 传递:字符串。当您实际需要呈现 字符串以供显示时,转换为 Unicode 并显式使用 W API。

例如:

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

关于c++ - Visual C++ - UTF-8 - CA2W 后跟带有 MBCS 的 CW2T - 可能是个坏主意?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55138971/

相关文章:

c++ - 是否有可能有一个基类方法调用所有派生类的相同(但被覆盖的方法)?

c++ - 如何从文件中读取一行中的特定字符?

c++ - 未解析的外部符号“public :

python - 用utf-8编码将ElementTree直接写入zip

php - UTF-8贯穿始终

c++ - fatal error : GL/gl. h: 没有那个文件或目录

Python 和 Ansible - 编解码器错误 UTF-8 到 ascii 转换

c++ - 将字符转换为 UTF-8 背后的逻辑

windows - 为什么不允许 UTF-8 作为 "ANSI"代码页?

c++ - 为什么在使用 "C"语言环境时 printf 可以显示非 ASCII 字符?