如何在 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 <clocale>
)
如果您使用的是 -lncurses
,请将您的链接更改为使用 -lncursesw
,而不是 -lncurses
。
【讨论】:
以上是关于如何在 Linux 的 ncurses 中显示特殊字符?的主要内容,如果未能解决你的问题,请参考以下文章