Задать вопрос
@artemfisher

Почему методы length() и codePointCount() для знака копирайта (с) возвращают одинаковую длину?

Добрый день!
Помогите понять разницу между этими двумя методами. Вроде, понял в чем разница между кодовыми точками и единицами, но не могу понять почему эти оба методы возвращают длину равную 2 для символа копирайта (с) (в юникод U+1F12F).
  • Вопрос задан
  • 35 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 2
Lord_of_Rings
@Lord_of_Rings
Дунадан - северный странник. Злой, но очень добрый
Ответ написан
Комментировать
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
В UTF-16 знак копилефта (а не копирайта) U+1F12F занимает два символа: D8 3C (high surrogate code point) и DD 2F (trail surrogate-DD2F), образующие одну кодовую точку.
А методы возвращают разную длину:
System.out.println("\uD83C\uDD2F");                      // тостер не поддерживает utf8mb4
System.out.println("\uD83C\uDD2F".length());             // 2
System.out.println("\uD83C\uDD2F".codePointCount(0, 2)); // 1
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы