使用Gmail API阅读电子邮件时,某些编码存在问题。 首先,我使用以下方法检索电子邮件:
message = service.users().messages().get(userId='me', id='169481bce75af185', format='raw').execute()
之后,我使用这些行从中获取字符串并将其转换为mime消息:
msg_str = str(base64.urlsafe_b64decode(message['raw'].encode('utf-8')).decode('utf-8'))
mime_msg = email.message_from_string(msg_str)
然后我打印出我得到的东西:
print(mime_msg.get_payload()[0])
但是我可以在输出中看到一些奇怪的字符,例如:
Gesch=C3=A4ftsf=C3=BChrer
在邮件标题中,我可以看到:
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
我做错了什么,如何在没有奇怪字符的情况下获得正确的输出?
谢谢您的时间
答案 0 :(得分:2)
您的数据已被编码为UTF-8,然后通过进一步编码为quoted-printable来确保7位传输的安全性。这就是消息头告诉您的内容。使用quopri
撤消quoted-printable,然后使用.decode
获得Unicode:
>>> import quopri
>>> print(quopri.decodestring("Gesch=C3=A4ftsf=C3=BChrer").decode("utf-8"))
Geschäftsführer
答案 1 :(得分:2)
如BoarGules所建议,它现在可以正确显示字符。浏览此站点也使我有了这个有用的功能:
def decode_email(msg_str):
p = Parser()
message = p.parsestr(msg_str)
decoded_message = ''
for part in message.walk():
charset = part.get_content_charset()
if part.get_content_type() == 'text/plain':
part_str = part.get_payload(decode=1)
decoded_message += part_str.decode(charset)
return decoded_message
将消息字符串转换为解码后的字符串,以正确显示字符。