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

chm*_*ike 3 c++ unicode wchar-t mojibake

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

std::wcout << L"élève" << std::endl;
Run Code Online (Sandbox Code Playgroud)

打印出"ÚlÞve:",这显然不是预期的.

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

Dav*_*nde 12

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

试试这个:

std::wcout << L"\x00E9l\x00E8ve" << std::endl;
Run Code Online (Sandbox Code Playgroud)

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

更新:

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