Я хотел бы напечатать (☞ ゚ ヮ ゚) ☞ с библиотекой 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-> ~) М-Ь ~ Х ~ ^
Я думаю, я опубликую это как ответ. Итак, 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"
Других решений пока нет …