我正在使用Python 3.5和imaplib
从GMail提取一封电子邮件并打印其正文。正文包含非ASCII字符。
这些以奇怪的方式被“编码”,我无法找到解决方法。
import email
import imaplib
c = imaplib.IMAP4_SSL('imap.gmail.com')
c.login('example@gmail.com', 'password')
c.select('Inbox')
_, data = c.fetch(b'12345', '(RFC822)')
mail = data[0][1]
message = email.message_from_bytes(mail)
payload = message.get_payload()
body = mail[0].as_string()
print(body)
给予
>> ... Mit freundlichen Gr=C3=BC=C3=9Fen ...
而不是期望的
>> ... Mit freundlichen Grüßen ...
在我看来,这不是编码问题,而是转换问题。但是如何告诉Python正确转换字符?有更方便的图书馆吗?
答案 0 :(得分:1)
文本用quoted-printable encoding编码,这是一种在ASCII文本中编码非ASCII字符的方法。您可以使用python的quopri模块对其进行解码。
>>> import quopri
>>> bs = b'Gr=C3=BC=C3=9Fen'
>>> # Decode quoted-printable to raw bytes.
>>> utf8 = quopri.decodestring(bs)
>>> # Decode bytes to text.
>>> s = utf8.decode('utf-8')
>>> print(s)
Grüßen
您可能会发现quoted-printable
是电子邮件的content-transfer-encoding
标头的值。