Пожалуйста, рассмотрите этот простой фрагмент:
#include <stdio.h>
#include <curses.h>
#include <stdlib.h>
#include <stdbool.h>
#include <signal.h>
void cleanup(int signal)
{
endwin();
exit(0);
}
int main()
{
initscr();
struct sigaction cleanup_action = { .sa_handler = cleanup, .sa_flags = 0 };
sigfillset(&cleanup_action.sa_mask);
sigaction(SIGINT, &cleanup_action, NULL);
cbreak();
keypad(stdscr, TRUE);
noecho();
mvaddstr(2, 2, "?");
mvaddstr(2, 3, "?");
mvaddstr(2, 4, "?");
mvaddstr(3, 2, "⬜");
mvaddstr(3, 2, "⚾");
mvaddstr(3, 4, "⬜");
refresh();
while(true) getch();
return 0;
}
(Нет, я не уверен, что моя очистка при выходе правильная, но это не главное.)
Почемуэмоджи не распечатываются?
Когда я запускаю эту программу, я вижу следующее:
���~_��
�~��~\
Я не понимаю этого, потому что согласно спецификации POSIX :
addnstr, addstr, mvaddnstr, mvaddstr, mvwaddnstr, mvwaddstr waddnstr, waddstr - добавить строку многобайтовых символов без отображения в окно и переместить курсор
"МУЛЬТИБАЙТ" говорят!Так что я думаю, это должно правильно распечатать!Я не ограничен ASCII!
Кроме того, я думаю, что мой терминал может обрабатывать эти символы.Это потому, что в отличие от curses.h
, stdio.h
может правильно их печатать:
#include <stdio.h>
int main()
{
printf("?⬜⚾\n");
return 0;
}
Это печатает:
?⬜⚾
Как я могу печатать эмодзи с помощью curses.h