python - как раскодировать любую кодировку в utf-8?

письма приходят на почту в разных кодировках, мне нужно достать текст из письма, но он бывает в разных кодировках (эта кодировка также задается в параметрах письма). Но у меня не получается раскодировать все текста сообщений, чтобы получить текст. Код получения писем скопировал с сайта http://espressocode.top/python-fetch-your-gmail-emails-from-a-particular-user/:

import email, imaplib

user = '[email protected]'
password = 'parol'
imap_url = 'imap.gmail.com'
  
# Функция для получения части содержимого электронной почты, т.е. его части тела
def get_body(msg):
    if msg.is_multipart():
        return get_body(msg.get_payload(0))
    else:
        return msg.get_payload(None, True)

# Функция для поиска пары ключ-значение
def search(key, value, con): 
    result, data = con.search(None, key, '"{}"'.format(value))
    return data
  
# Функция для получения списка электронных писем под этим ярлыком
def get_emails(result_bytes):
    msgs = [] # все данные электронной почты помещаются в массив
    for num in result_bytes[0].split():
        typ, data = con.fetch(num, '(RFC822)')
        msgs.append(data)
    return msgs
  
# это сделано для соединения SSL с GMAIL
con = imaplib.IMAP4_SSL(imap_url) 
  
# вход пользователя в
con.login(user, password) 
  
# вызов функции для проверки электронной почты под этим ярлыком
con.select('Inbox') 

# получение писем от этого пользователя "tu**h*****[email protected]"
msgs = get_emails(search('FROM', '[email protected]', con))
  
# Поиск необходимого контента в наших сообщениях
# Пользователь может вносить пользовательские изменения в этой части
# получить необходимый контент, который ему нужен
# распечатывать их в порядке их отображения в вашем Gmail
for msg in msgs[::-1]: 
    for sent in msg:
        if type(sent) is tuple: 
            # кодировка установлена как utf-8
            content = str(sent[1], 'utf-8') 
            data = str(content)
            # Обработка ошибок, связанных с unicodenecode
            try: 
                print(data)  
            except UnicodeEncodeError as e:
                pass
    break

При кодировке 8bit письма перекодируются в нормальную (читабельную) кодировку, но когда приходят другие кодировки, например base64, то перекодирование не срабатывает.


Ответы (0 шт):