Как я могу напечатать (☞ ゚ ヮ ゚) ☞ с помощью Ncurses?

Я хотел бы напечатать (☞ ゚ ヮ ゚) ☞ с библиотекой Ncurses, используя C ++ в Ubuntu.

Прежде всего, вы можете сделать это, просто имея:

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 ~ ^ ~~ С ~) ~ X ~ ^

Я думал, что, возможно, это было c_str()виноват, но когда я делаю это с std::cout это работает просто отлично тоже.

Как я могу напечатать этот текст с помощью Ncurses? Почему это работает с std::cout а не с нкурсами printw(char[])?

Я компилирую используя

g++ Main.cpp -lncurses

На 64-битной машине. Ubuntu (64 бита тоже) работает в VirtualBox с OSX в качестве хоста.


Обновить:

Я был перенаправлен на https://stackoverflow.com/a/9927113/555690. Решение там, кажется, не решает мою проблему — вместо этого, вот как это выглядит сейчас:

(М-Ь ~ Х ~ ^ М-OM-> ~М-с ~ CM-.М-OM-> ~) М-Ь ~ Х ~ ^

3

Решение

Я думаю, я опубликую это как ответ. Итак, 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"

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]