Radzhab
@Radzhab

Как определить кодировку строки и преобразовать в utf8?

Через imap подключаюсь к серверу и получаю список сообщений. Проблема в кодировке тела письма - в гугле оно одно, в яндексе другое. Хочу чтобы система автоматом определяла кодировку и преобразовывала его в utf8
import cchardet
def convert_encoding(data, new_coding = 'UTF-8'):
    encoding = cchardet.detect(data)['encoding']
    if new_coding.upper() != encoding.upper():
        data = data.decode(encoding, data).encode(new_coding)
    return data

def get_mails(login, password):
    print("Connecting to {}...".format(server))
    imap = imaplib.IMAP4_SSL(server)
    print("Connected! Logging in as {}...".format(login));
    imap.login(login, password)
    print("Logged in! Listing messages...");
    status, select_data = imap.select('INBOX')
    nmessages = select_data[0].decode('utf-8')
    status, search_data = imap.search(None, 'ALL')
    for msg_id in search_data[0].split(): 
        status, msg_data = imap.fetch(msg_id, '(RFC822)')
        msg_raw = msg_data[0][1].decode("utf8")

        mail = mailparser.parse_from_string(msg_raw)
        telo = convert_encoding(mail.body.encode()) # Вот тут траблы


Для примера - mail.body содержит следующий текст
'<div>\\u041f\\u0440\\u043e\\u0432\\u0435\\u0440\\u043a\\u0430 \\u0441</div>'

Выдаёт ошибку
TypeError: decode() argument 2 must be str, not bytes
  • Вопрос задан
  • 1699 просмотров
Пригласить эксперта
Ваш ответ на вопрос

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

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