2011-04-11 44 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位字符但是长度的两个元素

相关问题