如何在 Linux 的 ncurses 中显示特殊字符?

Posted

技术标签:

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

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

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

【问题讨论】:

codepad.org/z6MnmwcD @Predictability 最好将源代码包含在您的 *** 帖子中。你可以制作一个最小的完整程序,只打印一个有问题的行,它会使实际的修复变得明显。 【参考方案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++。为了让您的程序按预期运行,

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

【讨论】:

以上是关于如何在 Linux 的 ncurses 中显示特殊字符?的主要内容,如果未能解决你的问题,请参考以下文章

Linux环境下,基于Ncurse图形库贪吃蛇小游戏(上)

Linux系统下安装ncurses库

Linux环境下,基于Ncurse图形库贪吃蛇小游戏(中)

Linux环境下,基于Ncurse图形库贪吃蛇小游戏(中)

ncurses 在屏幕上显示多种颜色

如何连续刷新屏幕并实时更新[关闭]