2017-05-07 74 views
2

我試圖在一個使用C的linux終端中打印一個unicode星號字符(0x2605)。我遵循了網站上其他回答所建議的語法,但是我沒有收到輸出:在C中打印一個Unicode符號

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

int main(){ 

    wchar_t star = 0x2605; 
    wprintf(L"%c\n", star); 

    return 0; 
} 

我會很感激的任何建議,我尤其是如何能夠與ncurses庫這項工作。

+0

你對更常見的Unicode字符有麻煩嗎? – chux

+1

@chux嗯,我可以打印值爲'0x0061'的'a',但不能打印值爲'0x01ce'的''。 –

回答

4

兩個問題:首先,wchar_t必須打印%lc格式,而不是%c。第二個是,除非你撥打setlocale字符集設置不正確,你可能會得到?而不是你的明星。下面的代碼似乎工作,雖然:

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

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

修復了這個問題,謝謝! ★任何想法如何'mvwprint'這與'ncurses'雖然? –

+0

http://stackoverflow.com/questions/15222466/display-wchar-t-using-ncurses –

1

無論您是使用標準輸入輸出或ncurses的,你必須初始化語言環境,如ncurses manual指出。否則,多字節編碼(如UTF-8)不起作用。

wprintw不一定知道wchar_t(雖然它可能使用相同的底層printf,這取決於平臺和配置)。

  • 將它存儲在的wchar_t陣列,以及使用waddwstr,或
  • 將其存儲在cchar_t結構(具有setcchar):

    隨着ncurses的,你就在任何的這些方式顯示wchar_t以及使用wadd_wch與作爲參數,或

  • 轉換wchar_t爲多字節串,並使用waddstr
+0

感謝您的答覆。我一直得到廣義的'ncurses'函數的*隱式聲明*錯誤,還有其他一些庫,我需要包括? –

+0

你錯過了一個'#define'。通常應該是_XOPEN_SOURCE_EXTENDED',但是大多數平臺都有fdear的ifdef:for Linux只使用'-D_GNU_SOURCE'。你必須鏈接'-lncursesw',但這不是*隱式聲明* –

+0

你能解釋一下嗎? –