4

我想在 Ubuntu 中使用 C++ 使用 Ncurses 库打印 (☞゚ヮ゚)☞。

首先,你可以通过简单地做到这一点:

std::cout << "(☞゚ヮ゚)☞" << std::endl;

它工作得很好。

但是,使用 Ncurses 打印时,我认为您需要使用printw(char[]). 在这种情况下,我尝试这样的事情:

std::string str = "(☞゚ヮ゚)☞";   // String
initscr();                     // Start curses mode
printw(str.c_str());           // Print
getch();                       // Wait for input
endwin();                      // Exit curses mode

但它输出:

(�~X~^��~ �~C���~ )�~X~^

我原以为这可能是c_str()错的,但是当我这样做时,std::cout它也可以正常工作。

如何使用 Ncurses 打印该文本?为什么它适用std::cout于 Ncurses 而不适用于 Ncurses' printw(char[])

我编译使用

g++ Main.cpp -lncurses

在 64 位机器上。Ubuntu(也是 64 位)在以 OSX 作为主机的 VirtualBox 中运行。


更新

我已被重定向到https://stackoverflow.com/a/9927113/555690。那里的解决方案似乎无法解决我的问题 - 相反,这就是现在的样子:

(Mb~X~^M-oM->~ Mc~CM-.M-oM->~ )Mb~X~^

4

1 回答 1

6

我想我会发布这个作为答案。因此,Ubuntu 默认情况下显然不附带支持 Unicode 的版本。所以你首先需要安装它

sudo apt-get install libncursesw5-dev

然后你可以编译这个

#include <iostream>
#include <string>
#include "locale.h"
#include "ncursesw/ncurses.h"
using namespace std;

int main()
{
    setlocale(LC_ALL, "");
    std::string str = "(☞゚ヮ゚)☞";   // String
    initscr();                     // Start curses mode
    printw(str.c_str());           // Print
    getch();                       // Wait for input
    endwin();  
    return 0;
}

它会顺利工作。

注意#include "ncursesw/ncurses.h"

于 2013-10-15T12:09:48.193 回答