【问题标题】:Printing UTF8 characters to linux console using C++使用 C++ 将 UTF8 字符打印到 linux 控制台
【发布时间】:2014-02-27 12:33:23
【问题描述】:

我正在尝试获取 unicode 字符宏 (U+00AF),即超线,以便在各种 linux 控制台上一致地打印。到目前为止,一些控制台可以工作(例如,putty ssh),而另一些则不能(例如,ubuntu shell),而且我还无法弄清楚我在一种情况下(可能是运气)做对了,在另一种情况下做错了。

我确实了解 Unicode 和 Utf8 的基础知识,但我无法弄清楚如何始终如一地让控制台显示适当的字符。

有什么建议吗?请注意,这明确适用于 unix 控制台 - 我发现的所有类似问题都集中在特定于 Windows 的控制台命令上。

以下是我真正想要的工作:

wchar_t post = L'¯'; //0xC2AF
std::wcout << post << std::endl;

【问题讨论】:

标签: c++ unicode utf-8 console


【解决方案1】:

不幸的是,我尝试或找不到任何建议的方式始终显示适当的字符,因此我最终使用 ASCII 连字符“-”作为足够接近的匹配。

【讨论】:

    【解决方案2】:

    解决办法是把它作为多字符串放入流中:

    std::string s = "\uC2AF";
    std::cout << s << std::endl;
    

    或使用

    设置语言环境
    char* setlocale( int category, const char* locale);
    

    function:

    std::locale old_locale;  // current locale
    setlocale(LC_ALL, "en_US.UTF-8");
    wchar_t w = 0xC2AF;
    std::wcout << w << std::endl;
    setlocale(LC_ALL, old_locale.name().c_str());  // restore locale
    

    然而,最终结果取决于许多用户设置(控制台、字体等),因此不能保证它会正常。

    【讨论】:

      猜你喜欢
      • 2011-12-03
      • 2022-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多