【问题标题】:How do I display special characters in ncurses with Linux?如何在 Linux 的 ncurses 中显示特殊字符?
【发布时间】:2012-12-03 02:49:15
【问题描述】:

我正在尝试编写一个让 Lenny 跳起来的代码,但 Lenny 面对这样的情况:(͡° ͜ʖ ͡°)

编译和运行代码 (g++ -o Lenny main.cpp) 时,我得到输出“(͡° �~\�~V͡°)”。有没有办法让它显示(͡°͜ʖ͡°)?

【问题讨论】:

  • @Predictability 最好将源代码包含在您的 Stackoverflow 帖子中。你可以制作一个最小的完整程序,只打印一个有问题的行,它会使实际的修复变得明显。

标签: linux ncurses


【解决方案1】:

您正在处理 Unicode 字符。你可以使用这个库:ICU

查看更多here

【讨论】:

  • ICU 对于这么简单的事情来说有点过分了。
【解决方案2】:

Linux 具有良好的 Unicode 支持,如果您所做的只是输出,则不需要任何特殊库:

#include <iostream>
int main()
{
    std::cout << "( ͡° ͜ʖ ͡°)\n";
}

在线演示:http://ideone.com/UUS6Il

或者,您不能依赖 Linux 的内置 UTF-8 并明确说明:

#include <iostream>
#include <locale>
int main()
{
    std::locale::global(std::locale("en_US.utf8"));
    std::wcout.imbue(std::locale());
    std::wcout << L"( ͡° ͜ʖ ͡°)\n";
}

在线演示:http://ideone.com/EhTfB9

编辑:根据您在评论中的代码,您的问题实际上是关于 ncurses 库 I/O,而不是关于 C++。为了让您的程序按预期运行,

  1. main() 的开头附近添加setlocale(LC_ALL, "en_US.utf8"); 行(并相应地添加#include &lt;clocale&gt;
  2. 如果您使用的是 -lncurses,请将您的链接更改为使用 -lncursesw,而不是 -lncurses

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-12
    相关资源
    最近更新 更多