Как правильно посчитать длину текста с эмодзи в Python?

Столкнулся с проблемой при написании функции для телеграм-бота, который обрабатывает текст и добавляет новые entities (свойства текста). Иногда он это делает со смещением. Как показала практика, это связано с подсчётом длины сообщения из-за наличия в них эмодзи.

Многие эмодзи на самом деле занимают два символа, хоть отображаются как одна "картинка". Естественно и длина этих эмодзи определяется как 1 символ.

Пример. Делаем строку с таким эмодзи.
spoiler
6398acf2d2295461007957.jpeg

Но на самом деле эмодзи из двух символов:
spoiler
6398ad1a50f02949242399.jpeg

Пайтон видит длину так:
spoiler
6398ad468c1fe021786449.jpeg

В итоге в Телеграм сообщение имеем такое смещение при добавлении текстовой ссылки:
spoiler
6398ad69c6178280730154.jpeg


Как можно исправить этот косяк? Чем и как считать длину? По идее же, это UTF-8 показывает эмодзи как один символ. Может как-то менять кодировку при подсчёте длины?
  • Вопрос задан
  • 182 просмотра
Пригласить эксперта
Ответы на вопрос 1
Vapaamies
@Vapaamies
Разработчик будущей ОС для ПК размером 250 МБ
Проблема наверняка в веб-редакторе, режущем символ цвета. В самом Питоне проблемы нет. Если скопировать цветной эмодзи в нормальный редактор для программистов, отображающий кодировку и коды символов, всё работает.
python emo.py
2
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы