Python imaplib: правильно отображать символы не ASCII - PullRequest
0 голосов
/ 20 декабря 2018

Я использую 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 голосов
/ 21 декабря 2018

Текст кодируется с помощью цитируемой для печати кодировки , которая является способом кодирования не-ascii символов в тексте ascii.Вы можете декодировать его, используя quopri модуль python.

>>> 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 письма.

...