I'm trying to print a unicode star character (0x2605) in a linux terminal using C. I've followed the syntax suggested by other answers on the site, but I'm not getting an output:
#include <stdio.h>
#include <wchar.h>
int main(){
wchar_t star = 0x2605;
wprintf(L"%c\n", star);
return 0;
}
I'd appreciate any suggestions, especially how I can make this work with the ncurses library.
We can put the Unicode value with the prefix \u. Thus we can successfully print the Unicode character.
Unicode Character “C” (U+0043)
As far as I know, the standard C's char data type is ASCII, 1 byte (8 bits).
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:
wchar_t, and using waddwstr, orcchar_t structure (with setcchar), and using wadd_wch with that as a parameter, orwchar_t to a multibyte string, and using waddstr
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With