2011-04-11 74 views
3

來自文檔;在ICU UnicodeString中countChar32()和length()之間有什麼區別?

長度是UChar代碼單元在UnicodeString中的數量。如果你想要代碼點的數量,請使用countChar32()。在字符串的長度UCHAR代碼單元

計數的Unicode碼點。

代碼點可能佔用一個或兩個UChar代碼單元。計算代碼點涉及讀取所有代碼單元。

由此我傾向於認爲代碼點是一個實際的字符,代碼單元只是一個字符的一個可能的部分。

例如。

假設有一個Unicode字符串等:

「foobar的」

長度和countChar32將6.然後說你有一個的6個字符的是採取完整的32位來編碼組成的字符串長度將爲12,但countChar32將爲6.

這是正確的嗎?

+0

是的,這是完全正確的:一個代碼單元可能只是代碼點的一部分。 UTF-8和UTF-16都是可變寬度編碼。不同的是,一個使用8位代碼單元,另一個使用16位代碼單元。通常你需要的是代碼點的數量,而不是代碼單元。那麼這不是真的:你可能希望字形的數量(用戶感知的「字符」)甚至是「列印」,但這些是高階概念。記住refrain:'int'是新的'char'。 :) – tchrist 2011-04-12 00:48:03

回答

3

如果您使用超出基本多語言平面(BMP)的字符,這兩個值只會有所不同。這些字符以UTF-16表示爲替代對。兩個16位字符組成一個邏輯字符。如果使用任何這些,則每個計爲一個 32位字符但是長度的兩個元素

相關問題