std::wcout << 的意外输出 我”“我”; 在 Windows 外壳中
在测试一些在 wchar_t 和 utf8 之间转换字符串的函数时,我遇到了以下奇怪的结果,Visual C++ Express 2008
std::wcout << L"élève" << std::endl;
打印出“ÚlÞve:”,这显然不是预期的结果。
这显然是一个错误。 怎么可能 ? 我该如何处理这样的“功能”?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
C++ 编译器不支持代码文件中的 Unicode。 您必须将这些字符替换为转义版本。
试试这个:
此外,您的控制台也必须支持 Unicode。
更新:
它不会在控制台中产生所需的输出,因为控制台不支持 Unicode。
The C++ compiler does not support Unicode in code files. You have to replace those characters with their escaped versions instead.
Try this:
Also, your console must support Unicode as well.
UPDATE:
It's not going to produce the desired output in your console, because the console does not support Unicode.
我发现这些相关问题有有用的答案
是否有可以显示 Unicode 的 Windows 命令 shell字符?
如何在源中嵌入 unicode 字符串常量文件?
I found these related questions with useful answers
Is there a Windows command shell that will display Unicode characters?
How can I embed unicode string constants in a source file?
您可能还想看看这个问题。 它展示了如何使用某些编译器将 unicode 字符实际硬编码到文件中(我不确定 MSVC 会提供哪些选项)。
You might also want to take a look at this question. It shows how you can actually hard-code unicode characters into files using some compilers (I'm not sure what the options would be got MSVC).
虽然其他操作系统已经放弃了旧的字符编码并改用 UTF-8,但 Windows 使用两种旧编码:“OEM”代码页(在命令提示符下使用)和“ANSI”代码页(由 GUI 使用)。
您的 C++ 源文件采用 ANSI 代码页 1252(或可能是 1254、1256 或 1258),但您的控制台将其解释为 OEM 代码页 850。
While other operating systems have dispensed with legacy character encodings and switched to UTF-8, Windows uses two legacy encodings: An "OEM" code page (used at the command prompt) and an "ANSI" code page (used by the GUI).
Your C++ source file is in ANSI code page 1252 (or possibly 1254, 1256, or 1258), but your console is interpreting it as OEM code page 850.
您的 IDE 和编译器使用 ANSI 代码页。
控制台使用 OEM 代码页。
你用这些转换函数做什么也很重要。
You IDE and the compiler use the ANSI code page.
The console uses the OEM code page.
It also matter what are you doing with those conversion functions.