从文档;

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



以字符串的UChar码单元的长度计数Unicode码点。

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

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

例如。

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

'foobar'

length和countChar32都将为6。然后说,您有一个由6个字符组成的字符串,需要使用完整的32位进行编码,长度将为12,而countChar32将为6。

它是否正确?

最佳答案

仅当您使用基本多语言平面(BMP)之外的字符时,两个值才会不同。这些字符在UTF-16中表示为代理对。两个16位字符组成一个逻辑字符。如果您使用其中任何一个,则每对算作一个32位字符,但长度为2个元素。

07-27 18:18