Что именно делает строка.codePointAt делать?
недавно я столкнулся с codePointAt метод String в Java. Я нашел также несколько других кода методы: codePointBefore
, codePointCount
etc. Они определенно имеют какое-то отношение к Unicode, но я этого не понимаю.
Теперь я задаюсь вопросом, когда и как следует использовать codePointAt
и подобные методы.
3 ответов
короткий ответ: это дает вам Unicode код что начинается с указанного индекса в String
. т. е. "номер Юникода" символа в этой позиции.
более длинный ответ: Java был создан, когда 16 бит (он же char
) было достаточно для хранения любого символа Юникода, который существовал (эти части теперь известны как основной многоязычный самолет или BMP). Позже Unicode был расширен, чтобы включить символы с кодовая точка > 216. Это означает, что char
больше не может содержать все возможные кодовые точки Unicode.
UTF-16 было решение: он хранит" старые " кодовые точки Unicode в 16 бит (т. е. ровно один char
) и все новые в 32 бит (т. е. два char
значения). Эти два 16-битных значения называются "суррогатной парой". Теперь, строго говоря,char
содержит "кодовую единицу UTF-16 "вместо" символа Юникода", как раньше.
теперь все "старые" методы (обработка только char
) может использоваться просто отлично, пока вы не использовали ни один из" новых " символов Юникода (или не заботились о них), но если вы заботились о новых символах (или просто должны иметь полную поддержку Юникода), то вам нужно будет использовать версии "codepoint", которые на самом деле поддержка всех возможных кодовых точек Unicode.
кодовые точки поддерживают символы выше 65535, который является символом.МАКСИМАЛЬНОЕ ЗНАЧЕНИЕ.
Если у вас есть текст с такими высокими символами, вам нужно работать с кодовыми точками или int
вместо char
s.
он не поддерживает UTF-16, который может использовать один или два 16-битных символа и превратить его в int
AFAIK, как правило, это требуется только для Дополнительный Multiligual и Доп. Идеографические персонажи добавлены недавно такие, как нетрадиционный китайский.
короче говоря, редко, пока вы используете кодировку по умолчанию в Java :) но для более подробного объяснения попробуйте эти сообщения:
сравнение символа с кодовой точкой? http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Character.html http://javarevisited.blogspot.com/2012/01/java-string-codepoint-get-unicode.html
надеюсь, это поможет прояснить вещи для вас:)