2011-11-27 68 views
0

是什麼unicode字符或多字節字符:哪種類型更有效?爲什麼?

wchar_t arry[] 

char arry[] 

類型初始化的區別。
對於Unicode我知道字符我知道它有幾種格式的編碼。其中windows使用UTF-16。這意味着大多數字符都是16位。但在char中輸入一個字符是8bit。這是否意味着我們可以在wchar類型中存儲2個字節?

哪種更有效?爲什麼?

+4

幾乎沒有任何假設是正確的(或甚至接近),所以幾乎不可能回答這個問題。 (順便說一下,蘇聯俄羅斯使用UTC + 4。) –

+4

[UTC-8](http://en.wikipedia.org/wiki/UTC%E2%88%9208:00)是北美太平洋時區。我認爲你的意思是[UTF-8](http://en.wikipedia.org/wiki/UTF-8)。 –

回答

0

兩者在Windows上都是可變長度的(其中wchar_t意味着UTF-16),後者對於大多數測試來說是浪費的。即使在CJK中,通過網絡傳輸的文本也只有一半是ASCII。

The most portable and easiest way to support Unicode is to use UTF-8 (char)。這意味着在轉換爲UTF-16時爲了將字符串傳遞給Windows API而損失的性能很小,但與系統調用相比,它相對較小。

+1

聲明「'wchar_t' == UTF-16」具有誤導性。一種是C數據類型,另一種是文本編碼。 –

+0

@KerrekSB:好?另請注意,「多字節編碼」和「Widechar」是Microsoft用作「一些面向字節的編碼」和「UTF-16」的同義詞的術語。雖然我同意這個術語是不正確的。 – ybungalobill

+1

一個正確的語句是Windows將'UTF-16編碼的文本存儲在'wchar_t'字符串中,它被稱爲「寬字符串」。 –

-1

多字節是一種可變寬度編碼。使用英文時,您將使用1個字節,但對於非常罕見的字符集,通常爲2個或更多(最多6個字節)。因此,就內存使用而言,多字節通常更好。 但是,當您需要知道字符串中有多少個字符時,在unicode中,您可以將字符串長度除以2(sizeof(wchar_t))。在多字節中,您必須遍歷整個字符串並計算字母數量。 見multibyte

+3

「多字節」根本不是編碼。它是編碼的**屬性**:編碼是多字節或固定寬度。 –

+0

實際上,這個答案的幾乎每個方面都是不正確的。 –

相關問題