2009-04-24 88 views
10

我試圖像안,蠀輸出的東西,☃由Cunicode hello world for C?

#include <wchar.h> 
int main() 
{ 
    fwprintf(stdout, L"안, 蠀, ☃\n"); 
    return 0; 
} 

輸出?,?,?

如何打印這些字符?

編輯:

#include <wchar.h> 
#include <locale.h> 
int main() 
{ 
    setlocale(LC_CTYPE, ""); 
    fwprintf(stdout, L"안, 蠀, ☃\n"); 
    return 0; 
} 

這並獲得成功。輸出是안,蠀,☃。除了中文字符和雪人在我的urxvt中顯示爲框,可能是因爲我沒有啓用這些語言環境。

$ locale -a 
C 
en_US 
en_US.iso88591 
en_US.iso885915 
en_US.utf8 
ja_JP.utf8 
ko_KR 
ko_KR.euckr 
ko_KR.utf8 
korean 
korean.euc 
POSIX 
zh_CN.utf8 

哪些語言環境需要額外啓用才能顯示漢字和雪人?也許我需要字體?

將上述程序在Windows上工作嗎?

+0

你使用的是Windows還是Linux? – Zifre 2009-04-24 21:13:23

+0

該死的,什麼是錯的我的電腦,因爲我還看到那些?在代碼示例中! – alvatar 2009-04-24 21:13:29

+4

試試你的編碼設置爲Unicode(UTF-8)(在Firefox中,查看 - >字符編碼) – 2009-04-24 21:18:41

回答

1

您必須將系統配置爲接受這些字符。你在用什麼? Windows,Linux?

9

您必須將輸出終端設置爲與Unicode兼容。

在Linux(和Bash shell中),嘗試:

$ LANG=en.UTF-8 

,並確保您的終端仿真器實際上可以顯示Unicode和配置這樣做。

4

與c wchar_t定義爲:

類型wchar_t是一種獨特的類型,其值可表示不同的代碼所支持的語言(22.1.1)中所指定的最大擴展字符集的所有成員。 [...]

多字節字符和wchar_t的區別:

多字節字符可能需要對於給定的字符根據編碼(例如多於一個字節:UTF-8,UTF- 16)

wchar_t具有固定的大小即SIZ eof(wchar_t)是實現定義的。請注意,此寬度定義了您的wchar_t可支持的編碼。所以,如果sizeof(wchar_t) == 2你不能使用UTF-32編碼。

還記得wchar_t本身沒有編碼感。您首先必須告訴編譯器必須使用哪種編碼才能用於wchar_t數據。錯誤的輸出很可能是因爲字符被默認編碼處理,不能正確支持這些字符,而失敗的匹配導致'notdef'風格'?'輸出。

6

獲取Unicode輸出的過程中有許多獨立的階段 - 所有這些階段都必須正確配置。

首先,你支持Unicode編譯啓用?您需要在Windows下執行此操作(-D UNICODE -D __UNICODE)。

其次,你是否正在發射一個支持unicode的命令行,原則上都是這樣,而且還有一個包含你正在發射的字符的字形的字體?

第三,你的編譯器和你的命令行匹配使用的Unicode編碼是否匹配?當命令行期望UTF8時,在二進制文件中使用UCS2是沒有用的。

你基本上需要真正理解Unicode及其編碼,才能正確使用它。不要想象它很簡單,或者你不需要學習所有的基本概念;這個東西不是偶然的,因爲有太多東西必須是完全正確的。

0

就像Alnitak建議的那樣,必須指定一個包含要顯示的字符的字符集/編碼的區域設置。 (Unicode /)UTF-8應該覆蓋所有Unicode字符。

你的終端應該使用具有相應的字形字體。

對於超過8位的字符集,Windows'CMD.EXE出了名的弱點。也許,你需要一個GUI窗格而不是依賴於stdout。