【问题标题】:C++ UTF-8 stringsC++ UTF-8 字符串
【发布时间】:2017-03-04 04:30:08
【问题描述】:

我正在阅读 Bjarne Stroustrup 的“C++ 编程语言”,在第 7.3.2.2 节中通过打印说明:

u8"the officials vowels in Danish are:a, e, i o, u, \u00E6, \u00F8, \u00E5 and y."

你会得到:

丹麦语的官方元音有:a、e、i o、u、æ、ø、å 和 y。

但是,如果我在自己的机器上尝试这个,我会得到这个:

丹麦语的官方元音有:a、e、i o、u、├Ž、├Ş、├ą和y。

我做错了什么?

【问题讨论】:

  • 你的 shell/命令提示符能打印 utf-8 吗?
  • 我不知道。如何检查?
  • 在 Windows 机器上,您很容易因为 Microsoft 的运行时不支持 UTF-8 语言环境而轻松执行此操作。请参阅setlocale 的文档。有很多方法可以做到这一点,我之前已经回答过,但现在我的时间有限(秒,抱歉)。
  • 非常感谢。我试图找到你的答案,但我找不到。可以给我链接吗?
  • Stroustrup 在这里做了一个巨大的假设,这在 Windows 上根本不成立:向控制台发送 UTF-8 字节将显示正确的字符。 Windows 比其他任何东西都重视向后兼容性,它向您显示的字符与 35 年前相同的字节序列显示的字符相同。这比 Unicode 存在的时间要长得多。他们半心半意地尝试在控制台中支持 UTF-8,但它有问题,而不是默认设置,因此没有人使用它。在运行程序之前尝试命令chcp 65001

标签: c++ string c++11 utf-8


【解决方案1】:

出于某种原因,Windows 在控制台中默认不使用 UTF-8。

按照建议运行 chcp 65001 应该可以工作(65001 是 UTF-8 的 code page)。

或者我以编程方式使用:

#ifdef _WIN32
    if( !SetConsoleOutputCP( CP_UTF8 ) )
        throw "Setting Windows console to UTF-8 codepage failed!";
#endif

PS:IIRC 我在使用cout 时也遇到了问题(可能是由于locale)。但是printf() 对我有用。

【讨论】:

    猜你喜欢
    • 2023-03-27
    • 2014-02-05
    • 2015-01-19
    • 2012-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-31
    • 2011-09-06
    相关资源
    最近更新 更多