2015-06-14 71 views
3

我寫了一個小的C程序: 爲什麼在使用GCC的終端中Unicode字符無法正確顯示?

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

int main() { 
    wprintf(L"%s\n", setlocale(LC_ALL, "C.UTF-8")); 
    wchar_t chr = L'┐'; 
    wprintf(L"%c\n", chr); 
} 

爲什麼沒有這種打印字符

而是打印亂碼。 unicodetest

我檢查:

  • 沒有嘗試過的setlocale編譯,相同的結果
  • 終端本身可打印字符,我可以將其複製並粘貼到從文本編輯器終端,它的Gnome在Ubuntu
  • GCC版本終端是4.8.2
+1

除了下面有關正確的'printf'格式說明符的答案,根據您的輸出看來是正確的答案,您還應該確保您的源文件使用UTF-8編碼而不是像ISO-8859-15那樣。這種事情是爲什麼使用'L'\ u2510''而不是'L'┐''更好。 –

+0

使用正確的格式說明符,語言環境確實有所作爲,沒有它們,這些框字符就會回落到它們的ASCII等效字符,例如, '+','-'和'|'。 – Samik

回答

5

wprintf是一個版本的printf這需要廣泛的字符串作爲其格式字符串,但在其他方面表現得完全相同:%c仍被視爲char,而不是wchar_t。因此,您需要使用%lc來格式化寬字符。由於你的字符串是ASCII碼,你可以使用printf。例如:

int main() { 
    printf("%s\n", setlocale(LC_ALL, "C.UTF-8")); 
    wchar_t chr = L'┐'; 
    printf("%lc\n", chr); 
} 
相關問題