0

Please consider this simple snippet:

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

(No, I'm not certain that my clean-up on exit is correct, but that's not the point.)

Why are the emojis not being printed out?

When I run this program this is what I see:

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

I don't understand this because according to POSIX specification:

addnstr, addstr, mvaddnstr, mvaddstr, mvwaddnstr, mvwaddstr waddnstr, waddstr - add a string of multi-byte characters without rendition to a window and advance cursor

"MULTI-BYTE" they say! So I guess this should print out correctly! I'm not limited to ASCII!

Also, I guess my terminal can handle these characters. This is because as opposed to curses.h, stdio.h is able to print them correctly:

#include <stdio.h>

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

This prints out:

⬜⚾

How can I print emojis with curses.h?

  • Possible duplicate of [Print a wide unicode character with ncurses](https://stackoverflow.com/questions/43834833/print-a-wide-unicode-character-with-ncurses) – Jean-Baptiste Yunès Jun 10 '19 at 15:37
  • Possible duplicate of [Print Unicode characters in C, using ncurses](https://stackoverflow.com/questions/34538814/print-unicode-characters-in-c-using-ncurses). The problem is both missing `setlocale` and possibly ncurses vs ncursesw library. – Thomas Dickey Jun 10 '19 at 16:18

0 Answers0