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

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

Добрый день!
Помогите понять разницу между этими двумя методами. Вроде, понял в чем разница между кодовыми точками и единицами, но не могу понять почему эти оба методы возвращают длину равную 2 для символа копирайта (с) (в юникод U+1F12F).
  • Вопрос задан
  • 101 просмотр
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 3
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
Ответ написан
Комментировать
@Mercury13
Программист на «си с крестами» и не только
1F12F — это символ копилефта.
А точно вы имеете дело с ним, а не вот с этим эмодзиком?
6765db2f10ea3231097248.png
В нём два символа базовой плоскости (codePointCount). Длина в единицах UTF-16 — тоже два (length).

UPD. Да, вопрос
Почему String.codePointCount() возвращает 2 для символа ©?
ваш, и вы в нём отметили неправильный ответ. Второй символ - не пробел, а селектор начертания 16.

Программа, если что, моя, и зовётся «Юникодия». Гуглите, она первая в выдаче.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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