Функция телемарафона event.response() обнаруживает, что моя строка python не находится в UTF-8

#python #telegram #telegram-bot #telethon

Вопрос:

Я пишу небольшой скрипт на python, используя библиотеку телемарафонов. Одна из функций, которую я пишу, возвращает частоту использования слов определенного пользователя. Частота использования слов содержится в строковом объекте, который возвращается пользователю в Telegram.

Код этой функции показан ниже.

 @bot.on(events.NewMessage(pattern='/wordsUsage'))
async def start(event):
    """Returns the word usage frequency of a specific user."""
    messagesHistory = await client.get_messages(chat_id, None, from_user=event.message.from_id.user_id)
    messagesHistory = [i.message for i in messagesHistory if type(i.message) is str]
    # I know this line is ugly, let me alone c:
    listWords = ' '.join(messagesHistory).replace('n', ' ').split(' ')
    countWord = dict()
    for word in listWords:
        if word not in countWord.keys():
            countWord[word] = 1
        else:
            countWord[word]  = 1
    countWord = sorted(countWord.items(), key=lambda item: item[1])
    await event.respond(pprint.pformat(countWord, indent=4))
    raise events.StopPropagation
 

При вызове этой функции я получаю следующую ошибку :

 telethon.errors.rpcerrorlist.MessageEmptyError: Empty or invalid UTF-8 message was sent (caused by SendMessageRequest)
 

Я не понимаю, где я ошибаюсь, так как строки Python3 являются строками UTF-8.

Комментарии:

1. Какую версию вы используете? Каков же результат pprint.pformat ? Это непустая строка? Вы уверены, что ошибка исходит от этой функции?

2. @Lonami Я использую версию 1.23.0. Это образец результата pprint.pformat : ('une', 31), ('ca', 33), ('̬̝̮̱̫̖̓͋͠Ⓘ̶̪̬͔̰̇̒Ⓝ̶̤͕̥͎͓̐ͩ͛̚☠️🔥🔥☠️Ⓓ̲̠̺͉̯͓͑ͧ̾͜Ⓤ͍̺̭̺̹̾̏̏͂́', 33), ('̜̲͍̼̭̈́̓̂̀ͅⓅ̶͚̖̘̫̖͙̮̏Ⓐͨ', 34), ('que', 35), ('et', 35),

3. Эмодзи кажутся сломанными, так что, вероятно, именно поэтому. Возможно, вам захочется удалить неверные символы из выходных данных перед их использованием respond (например, кодирование в ASCII и обратно).

4. Да, я это видел, но поскольку строки Python3 являются строками UTF-8, я подумал, что все будет в порядке. Я санирую вывод :). Спасибо за вашу помощь.

5. Строки Python 3 являются UTF-8, но ничто не мешает им иметь недопустимый UTF-8 (в отличие, скажем, от Rust, который будет паниковать во время выполнения).