Может ли Character представлять всю кодовую точку Unicode? - PullRequest
3 голосов
/ 07 января 2012

Поскольку Java char имеет длину 16 бит, мне интересно, как он может представлять полный код Unicode?Он может представлять только 65536 кодовых точек, верно?

Ответы [ 2 ]

8 голосов
/ 07 января 2012

Да, символ Java - это кодовая единица UTF-16. Если вам необходимо представить символы Юникода вне базовой многоязычной плоскости, вам необходимо использовать суррогатные пары в пределах java.lang.String. Класс String предоставляет различные методы для работы с полными кодовыми точками Unicode, например codePointAt(index).

Из раздела 3.1 спецификации языка Java :

Стандарт Unicode изначально разрабатывался как 16-битная кодировка символов фиксированной ширины. С тех пор он был изменен, чтобы учесть символы, для представления которых требуется более 16 бит. Диапазон кодовых точек теперь составляет от U + 0000 до U + 10FFFF с использованием шестнадцатеричной записи U + n. Символы, кодовые точки которых больше, чем U + FFFF, называются дополнительными символами. Для представления всего диапазона символов с использованием только 16-битных единиц стандарт Unicode определяет кодировку под названием UTF-16. В этом кодировании дополнительные символы представляются в виде пар 16-битных кодовых единиц, первая из диапазона с более высокими суррогатами (U + D800 до U + DBFF), вторая из диапазона с более низкими суррогатами (U + DC00 до U) + DFFF). Для символов в диапазоне от U + 0000 до U + FFFF значения кодовых точек и кодовых единиц UTF-16 одинаковы.

Язык программирования Java представляет текст в виде последовательностей 16-битных кодовых единиц с использованием кодировки UTF-16. Некоторые API, в основном из класса Character, используют 32-разрядные целые числа для представления кодовых точек в качестве отдельных объектов. Платформа Java предоставляет методы для преобразования между двумя представлениями.

См. Character документы для получения дополнительной информации.

2 голосов
/ 07 января 2012

Один char, который является 16-разрядным без знака, может представлять любую кодовую точку до 0xFFFF, но не дополнительные символы, которые больше.В Java лучше всего использовать кодировку UTF-16 в char, поэтому дополнительные символы фактически представлены в виде пар char, суррогатной пары.В то время как один char не может представлять такие дополнительные символы, Java справляется с этим.

...