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

最佳答案

文本用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标头的值。

关于python - Python imaplib:正确显示非ASCII字符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53871898/

10-12 12:22
查看更多