3

在测试一些函数以在 wchar_t 和 utf8 之间转换字符串时,我在 Visual C++ express 2008 中遇到了以下奇怪的结果

std::wcout << L"élève" << std::endl;

打印出“ÚlÞve:”,这显然不是预期的。

这显然是一个错误。怎么可能 ?我应该如何处理这样的“功能”?

4

5 回答 5

12

C++ 编译器不支持代码文件中的 Unicode。您必须用它们的转义版本替换这些字符。

试试这个:

std::wcout << L"\x00E9l\x00E8ve" << std::endl;

此外,您的控制台也必须支持 Unicode。

更新:

它不会在您的控制台中产生所需的输出,因为控制台不支持 Unicode。

于 2009-04-06T13:09:24.787 回答
2

我发现这些相关问题和有用的答案 是否有 Windows 命令外壳可以显示 Unicode 字符? 如何在源文件中嵌入 unicode 字符串常量?

于 2009-04-06T13:31:26.387 回答
1

您可能还想看看这个问题。它展示了如何使用一些编译器将 unicode 字符实际硬编码到文件中(我不确定 MSVC 会有哪些选项)。

于 2009-04-06T13:12:33.423 回答
1

这显然是一个错误。怎么可能?

虽然其他操作系统已经放弃了传统字符编码并切换到 UTF-8,但 Windows 使用两种传统编码:“OEM”代码页(用于命令提示符)和“ANSI”代码页(用于 GUI)。

您的 C++ 源文件位于 ANSI 代码页 1252(或可能是 1254、1256 或 1258)中,但您的控制台将其解释为 OEM 代码页 850。

于 2010-08-21T02:25:19.753 回答
0

您的 IDE 和编译器使用 ANSI 代码页。控制台使用 OEM 代码页。

你用这些转换函数做什么也很重要。

于 2009-11-11T08:42:49.277 回答