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

3

我正在尝试编写一段代码,让Lenny跳跃,但Lenny的表情是这样的:( ͡° ͜ʖ ͡°)

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


http://codepad.org/z6MnmwcD - Predictability
@Predictability 最好在您的Stackoverflow帖子中包含源代码。您可以编写一个最小完整程序,仅打印出那个有问题的行,这将使实际修复变得明显。 - Cubbi
2个回答

0

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 <clocale>
  2. 如果您正在使用-lncurses,请将您的链接行更改为使用-lncursesw

0

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

在这里查看更多信息:here


ICU对于这么简单的事情来说有点过头了。 - bames53

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接