我知道这个问题已经被问过上千次了,但我的精神快崩溃了,所以我忍不住要寻求帮助。
我有一封带有法语口音的电子邮件 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/