在测试一些函数以在 wchar_t 和 utf8 之间转换字符串时,我在 Visual C++ express 2008 中遇到了以下奇怪的结果
std::wcout << L"élève" << std::endl;
打印出“ÚlÞve:”,这显然不是预期的。
这显然是一个错误。怎么可能 ?我应该如何处理这样的“功能”?
C++ 编译器不支持代码文件中的 Unicode。您必须用它们的转义版本替换这些字符。
试试这个:
std::wcout << L"\x00E9l\x00E8ve" << std::endl;
此外,您的控制台也必须支持 Unicode。
更新:
它不会在您的控制台中产生所需的输出,因为控制台不支持 Unicode。
我发现这些相关问题和有用的答案 是否有 Windows 命令外壳可以显示 Unicode 字符? 如何在源文件中嵌入 unicode 字符串常量?
您可能还想看看这个问题。它展示了如何使用一些编译器将 unicode 字符实际硬编码到文件中(我不确定 MSVC 会有哪些选项)。
这显然是一个错误。怎么可能?
虽然其他操作系统已经放弃了传统字符编码并切换到 UTF-8,但 Windows 使用两种传统编码:“OEM”代码页(用于命令提示符)和“ANSI”代码页(用于 GUI)。
您的 C++ 源文件位于 ANSI 代码页 1252(或可能是 1254、1256 或 1258)中,但您的控制台将其解释为 OEM 代码页 850。
您的 IDE 和编译器使用 ANSI 代码页。控制台使用 OEM 代码页。
你用这些转换函数做什么也很重要。