性病的意外输出:: wcout << L“élève”; Windows Shell中
题
虽然测试了一些函数来wchar_t的和UTF8之间转换字符串我遇到用Visual C以下怪异结果++速成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使用的 2 强>遗留编码的:“OEM”代码页(在命令提示使用)和一个“ANSI “代码页(由GUI中使用)。
您C ++源文件是在ANSI代码页1252(或可能1254,1256,或1258),但是您的控制台将其解释为OEM代码850页。
您IDE和编译器使用ANSI代码页。 控制台使用OEM代码页。
这也很重要你在这些转换功能做的事情。
不隶属于 StackOverflow