В ICU UnicodeString какая разница между countChar32 () и length ()? - PullRequest
3 голосов
/ 12 апреля 2011

из документов;

Длина - это количество единиц кода UChar в UnicodeString.Если вы хотите количество кодовых точек, используйте countChar32 ().

и

Подсчет кодовых точек Unicode в единицах длины строки кода UChar длины.

Кодточка может занимать одну или две единицы кода UChar.Подсчет кодовых точек включает в себя чтение всех кодовых единиц.

Исходя из этого, я склонен думать, что кодовая точка является действительным символом, а кодовая единица является лишь одной возможной частью символа.

Дляпример.

Допустим, у вас есть строка в кодировке Unicode, например:

'foobar'

И length, и countChar32 будут равны 6. Затем скажите, что у вас есть строка, состоящая из 6 символовдля кодирования длины потребуется всего 32 бита, а для countChar32 - 6.

Это правильно?

1 Ответ

3 голосов
/ 12 апреля 2011

Два значения будут отличаться только в том случае, если вы используете символы вне Базовой многоязычной плоскости (BMP). Эти символы представлены в UTF-16 как суррогатные пары . Два 16-битных символа составляют один логический символ. Если вы используете какой-либо из них, каждая пара считается как один 32-разрядный символ, но два элемента длина .

...