Python imaplib:正确显示非ASCII字符

时间:2018-12-20 15:47:42

标签: python python-3.x character-encoding email-integration non-ascii-characters

我正在使用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正确转换字符?有更方便的图书馆吗?

1 个答案:

答案 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标头的值。