@che_aa

Почему телеграм шлет неправильную длину entity?

У меня есть код который печатает текст сообщения, длину текста и форматирование сообщения.
import telebot 


bot = telebot.TeleBot(token)


@bot.message_handler(content_types=['text'])
def messages(message):
	print('text: ')
	print(message.text) 
	print('len: ')
	print(len(message.text))
	print('entities: ')
	print(message.json['entities'])
bot.polling(none_stop = True, timeout=123)


На выходе я получаю:
text: 

len: 
1
entities: 
[{'offset': 0, 'length': 2, 'type': 'text_link', 'url': 'https://github.com/eternnoir/pyTelegramBotAPI'}]

Почему телеграмм шлет неправильную длину форматирования? Я заметил что это работает только со смайликами, и то не со всеми, как это можно отследить и исправить?
  • Вопрос задан
  • 97 просмотров
Пригласить эксперта
Ответы на вопрос 2
@AlbertForest
@bot.message_handler(content_types=['text'])
def messages(message):
    if message.json.get('entities'):
        print(f"tg length: {message.json['entities'][0]['length']}")
        print(f"calc length: {len(message.json['text'].encode('utf-16-le')) // 2}")

bot.polling(none_stop = True, timeout=123)
Ответ написан
Комментировать
Dr_Elvis
@Dr_Elvis Куратор тега Python
В гугле забанен
Потому что unicode:
len('a'.encode('utf-8'))
len('ǣ'.encode('utf-8'))
len('橦'.encode('utf-8'))
len(''.encode('utf-8')) # тут на самом деле смайлик в кавычках, просто QnA его съел

1
2
3
4

Смайлик с флагом вообще 8 байт
Ответ написан
Ваш ответ на вопрос

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

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