2016-04-15 15 views
4

Ich brauche einig Unicode-Zeichen für mein Spiel auf Terminal zu drucken, das einige, wie, \U0001F0A1, und mein CodeDrucke lange Unicode in ncurses

#include <curses.h> 
#include <locale.h> 
int main(){ 
    setlocale(LC_ALL, ""); 
    initscr(); 
    printw("\U0001F0A1"); 
    getch(); 
    endwin(); 
    return 0; 
} 

und alle es auszudrucken ist leerer Bildschirm, aber wenn ich versuchte, Mit printf kann eine Karte normal ausgedruckt werden.

+1

Try 'setlocaleQ (LC_ALL "en_US.UTF-8");' ' –

+0

Auch printw (L "\ U0001F0A1");' –

+0

http://stackoverflow.com/questions/4703168/adding-unicode-utf8 -chars-zu-a-ncurses-display-in-c – Boiethios

Antwort

3

Das wahrscheinliche Problem ist das: Ncurses verwendet , um die Breite des Zeichens zu bestimmen, und printf überprüft nicht. Die Länderinformationen auf Ihrem Computer sind zu alt, um korrekte Ergebnisse zu erzielen.

Überprüfung mit meinem Debian Testing, das funktioniert (das Beispielprogramm unter Verwendung von in der Frage gegeben, Kompilieren/Verknüpfung mit ncursesw) - siehe Screenshot:

enter image description here

Nach fileformat-info, das von Unicode kommt 6.0 (2010). Abhängig davon, welches System Sie verwenden, z. B. Debian oder Ubuntu, kann dies "neu" sein.

ncurses erfordert korrekte Gebietsschemainformationen wcwidth, während printf die wcwidth-Information nicht verwendet. Wenn Ihre Gebietsschemainformationen zu alt sind, gibt wcwidth einen negativen Wert zurück und teilt Ncurses mit, dass das Zeichen nicht gedruckt wird. In diesem Fall zeigt ncurses ein Leerzeichen an.

+0

Ich kann nicht genau sagen, was Sie hier sagen. Sagen Sie, das System des OP könnte dies unterstützen oder nicht? Oder dass der Code in Ordnung ist? Oder dass der Code nicht in Ordnung ist? Dass das OP stattdessen "printf" verwenden muss? Was versuchst du zu sagen? –

+1

Das System von OP unterstützt es möglicherweise nicht: ncurses benötigt korrekte Informationen zur lokalen Sprachumgebung, während printf die wcwidth-Informationen nicht verwendet. –

+0

Okay, ich denke, ich war zu subtil, aber was ich versuche zu sagen ist, dass du deine Antwort editieren solltest, um klarer zu sehen, was deine Empfehlung ist, weil ich im Moment nicht überzeugt bin, dass es wirklich eine Antwort ist. –