std::wcout << 的意外输出 我”“我”; 在 Windows 外壳中

发布于 2024-07-16 06:31:30 字数 229 浏览 9 评论 0 原文

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

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

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

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

While testing some functions to convert strings between wchar_t and utf8 I met the following weird result with Visual C++ express 2008

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

prints out "ÚlÞve:" which is obviously not what is expected.

This is obviously a bug. How can that be ? How am I suppose to deal with such "feature" ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

沙沙粒小 2024-07-23 06:31:30

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

试试这个:

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

此外,您的控制台也必须支持 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:

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

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.

浅蓝的眸勾画不出的柔情 2024-07-23 06:31:30

您可能还想看看这个问题。 它展示了如何使用某些编译器将 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).

紫罗兰の梦幻 2024-07-23 06:31:30

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

虽然其他操作系统已经放弃了旧的字符编码并改用 UTF-8,但 Windows 使用两种旧编码:“OEM”代码页(在命令提示符下使用)和“ANSI”代码页(由 GUI 使用)。

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

This is obviously a bug. How can that be?

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.

千紇 2024-07-23 06:31:30

您的 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文