Через imap подключаюсь к серверу и получаю список сообщений. Проблема в кодировке тела письма - в гугле оно одно, в яндексе другое. Хочу чтобы система автоматом определяла кодировку и преобразовывала его в
utf8import 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