Ben*_*ers 19
使用char并将其视为UTF-8.造成这种情况的原因很多; 这个网站比我能更好地总结它:
它建议您在从任何库中收到它后立即转换wchar_t为char(UTF-16到UTF-8),并在需要将字符串传递给它时转换回来.因此,要回答您的问题,请始终使用,char除非API要求您传递或接收wchar_t.
WCHAR(或wchar_t在 Visual C++ 编译器上)用于Unicode UTF-16字符串。
这是 Win32 API 使用的“本机”字符串编码。
CHAR(或char) 可用于其他几种字符串格式:ANSI、MBCS、UTF-8。
由于 UTF-16 是Win32 API的本机编码,因此您可能希望在应用程序内的 Win32 API 边界处使用WCHAR(以及更好的基于它的适当字符串类,例如std::wstring)。
并且您可以使用 UTF-8(so、CHAR/char和std::string)在您的应用程序边界之外交换您的 Unicode 文本。例如:UTF-8 在互联网上被广泛使用,当你在不同平台之间交换 UTF-8 文本时你不存在字节序的问题(而不是 UTF-16 你必须同时考虑 UTF-16BE大- endian和 UTF-16LE little-endian情况)。
您可以使用WideCharToMultiByte()和MultiByteToWideChar()Win32 API在 UTF-16 和 UTF-8 之间进行转换。这些是纯 C API,可以方便地包装在 C++ 代码中,使用字符串类代替原始字符指针,使用异常代替原始错误代码。你可以在这里找到一个例子。