在ICU UnicodeString中countChar32()和length()有什么区别?

时间:2011-04-11 20:29:33

标签: c++ unicode icu unicode-string

来自文档;

长度是UnicodeString中UChar代码单元的数量。如果您想要代码点数,请使用countChar32()。

以字符串的长度UChar代码单位计算Unicode代码点。

代码点可能占用一个或两个UChar代码单元。计算代码点涉及读取所有代码单元。

由此我倾向于认为代码点是一个实际字符,而代码单元只是字符的一个可能部分。

例如。

假设你有一个unicode字符串,如:

'foobar的'

长度和countChar32都是6.然后说你有一个由6个字符组成的字符串,它取整个32位来编码,长度为12,但countChar32为6。

这是对的吗?

1 个答案:

答案 0 :(得分:3)

如果您使用基本多语种平面(BMP)之外的字符,则这两个值只会有所不同。这些字符在UTF-16中表示为代理项对。两个16位字符组成一个逻辑字符。如果您使用其中任何一个,则每个计为一个 32位字符,但 length 的两个元素。