Python 电子邮件负载解码

标签 python encoding

我知道这个问题已经被问过上千次了,但我的精神快崩溃了,所以我忍不住要寻求帮助。

我有一封带有法语口音的电子邮件 caractères。句子是:

“席琳:柏林安妮特:0633”。

python的email包变化

':' 在 '=3A' 上

“=E9”上的“é”。

如何变回口音??和“=”符号?

我尝试了几种通过网络查找的方法:

获取负载:

>>> z = msg.get_payload()
>>> z
'C=E9line =3A Berlin Annette =3A 0633'
>>> infos(z)
(<type 'str'>, '  'C=E9line =3A Berlin Annette =3A 0633')

通过字符集解码:

>>> z = msg.get_payload().decode(msg.get_content_charset())
>>> z
u'  C=E9line =3A Berlin Annette =3A 0633'
>>> infos(z)
(<type 'unicode'>, u'  'C=E9line =3A Berlin Annette =3A 0633')

或者解码后用utf_8编码:

>>> z = msg.get_payload().decode(msg.get_content_charset()).encode('utf-8')
>>> z
  'C=E9line =3A Berlin Annette =3A 0633'
>>> infos(z)
(<type 'str'>,   'C=E9line =3A Berlin Annette =3A 0633')

我也试过 urllib:

urllib.unquote(z)
'C=E9line =3A 00493039746784 Berlin Annette =3A 0633'

似乎没有任何效果:(

最佳答案

您可以使用 quopri.decodestring解码字符串。

>>> quopri.decodestring('C=E9line =3A 00493039746784 Berlin Annette =3A 0633')
'C\xe9line : 00493039746784 Berlin Annette : 0633'

如果将 decode=True 传递给 Message.get_payload ,它会为你做上面的事情:

msg.get_payload(decode=True)

关于Python 电子邮件负载解码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27550567/

相关文章:

python - 在 zlib 中编码并插入到 mysql

python - Selenium Python - 获取网络响应主体

python - 字典中键替换时的奇怪行为

python - 如何检测字符串字节编码?

python - 我在同一台PC上有2个以太网接口(interface),如何知道Python中连接的是哪个接口(interface)?

Javascript FileReader readAsText 函数不理解 ä 和 ö 等 utf-8 编码字符

java - 如何在groovy中将utf8mb4更改为UTF-8?

AES 加密的 C# UTF8 编码问题

c# 如何将阿拉伯字符编码为utf8?

python - 如何在 Python 3 中解码 HTTP 请求头和正文?