std :: wcout<<的意外输出L “élève”;在Windows Shell中

时间:2009-04-06 13:07:01

标签: c++ unicode wchar-t mojibake

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

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

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

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

5 个答案:

答案 0 :(得分:12)

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

试试这个:

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

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

更新:

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

答案 1 :(得分:2)

答案 2 :(得分:1)

您可能还想查看this question。它展示了如何使用一些编译器将unicode字符硬编码到文件中(我不确定MSVC会有什么选项)。

答案 3 :(得分:1)

  

这显然是一个错误。怎么会这样?

虽然其他操作系统已经省去了旧版字符编码并切换到UTF-8,但Windows使用两个旧版编码:“OEM”代码页(在命令提示符下使用)和“ANSI” “代码页(由GUI使用)。

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

答案 4 :(得分:0)

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

使用这些转换函数你也在做什么。