Printing a Unicode Symbol in C

Two problems: first of all, a wchar_t must be printed with %lc format, not %c. The second one is that unless you call setlocale the character set is not set properly, and you probably get ? instead of your star. The following code seems to work though:

#include <stdio.h>
#include <wchar.h>
#include <locale.h>

int main() {
    setlocale(LC_CTYPE, "");
    wchar_t star = 0x2605;
    wprintf(L"%lc\n", star);
}

And for ncurses, just initialize the locale before the call to initscr.


Whether you are using stdio or ncurses, you have to initialize the locale, as noted in the ncurses manual. Otherwise, multibyte encodings such as UTF-8 do not work.

wprintw doesn't necessarily know about wchar_t (though it may use the same underlying printf, this depends on the platform and configuration).

With ncurses, you would display a wchar_t in any of these ways:

  • storing it in an array of wchar_t, and using waddwstr, or
  • storing it in a cchar_t structure (with setcchar), and using wadd_wch with that as a parameter, or
  • converting the wchar_t to a multibyte string, and using waddstr

Tags:

C

Unicode

Ncurses