2016-04-15 35 views
4

我需要打印一些Unicode字符爲我的遊戲終端,有的像這樣,\U0001F0A1,和我的代碼打印長的Unicode中的ncurses

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

和所有它打印出來是黑屏,但是當我試圖使用printf,它可以正常打印卡片。

+1

試試'setlocale(LC_ALL,「en_US.UTF-8」);' –

+0

也''printw(L「\ U0001F0A1」);' –

+0

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

回答

3

可能的問題是:ncurses使用wcwidth來確定字符的寬度,printf不檢查。計算機上的語言環境信息太舊,無法給出正確的結果。

與我的Debian的測試檢查,這工作(使用的問題給出的示例程序,編譯/與ncursesw連接) - 見截圖:

enter image description here

根據fileformat-info,這是來自統一6.0 (2010年)。取決於您使用的系統,例如Debian或Ubuntu,可能是「最近」的。

ncurses需要正確的wcwidth區域設置信息,而printf不使用wcwidth-information。如果您的區域設置信息太舊,wcwidth會返回負值,從而告訴ncurses該字符爲非打印。在這種情況下,ncurses將顯示一個空白。

+0

我不太清楚你在這裏說什麼。你是說OP的系統可能支持或不支持?或者代碼很好?或者代碼不好? OP需要使用'printf'來代替?你想說什麼? –

+1

OP的系統可能不支持它:ncurses需要正確的wcwidth區域設置信息,而printf不使用wcwidth-information。 –

+0

好吧我想我太微妙了,但我想說的是,你應該編輯你的答案,以更清楚你的推薦是什麼,因爲目前我不相信這真的是一個答案。 –