在测试一些函数来转换wchar_t和utf8之间的字符串时,我在Visual C ++ express 2008中遇到了以下奇怪的结果
std::wcout << L"élève" << std::endl;
打印出“ÚlÞve:”,这显然不是预期的。
这显然是一个错误。怎么可能 ?我怎么想处理这样的“功能”?
答案 0 :(得分:12)
C ++编译器不支持代码文件中的Unicode。您必须使用转义版本替换这些字符。
试试这个:
std::wcout << L"\x00E9l\x00E8ve" << std::endl;
此外,您的控制台也必须支持Unicode。
更新:
它不会在控制台中产生所需的输出,因为控制台不支持Unicode。
答案 1 :(得分:2)
我发现这些相关问题的答案很有用 Is there a Windows command shell that will display Unicode characters? How can I embed unicode string constants in a source file?
答案 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代码页。
使用这些转换函数你也在做什么。