为什么不能在curses模式下将非ASCII字符打印到控制台?

时间:2019-06-10 12:12:00

标签: unicode printing console posix curses

请考虑以下简单代码段:

#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;
}

(不,我不确定我的出口清理是否正确,但这不是重点。)

为什么表情符号没有被打印出来?

当我运行该程序时,我会看到:

  ���~_��
  �~��~\

我不明白这是因为according to POSIX specification

  

addnstr,addstr,mvaddnstr,mvaddstr,mvwaddnstr,mvwaddstr waddnstr,waddstr-将多字节字符字符串(不带移译)添加到窗口并前进光标

他们说

“ MULTI-BYTE” !因此,我认为这应该正确打印!我不仅限于ASCII!

此外,我想我的终端可以处理这些字符。这是因为与curses.h相比,stdio.h能够正确打印它们:

#include <stdio.h>

int main()
{
  printf("?⬜⚾\n");
  return 0;
}

打印输出:

?⬜⚾

如何使用curses.h打印表情符号?

0 个答案:

没有答案