我知道这个问题已经被问了好几千次,但我接近紧张的休息时间,所以我忍不住寻求帮助。
我收到了法语口音caractères的电子邮件。这句话是:
“céline:Berlin Annette:0633'。
python的电子邮件包更改
':'on'= 3A'
“é”on“= 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'
似乎没有任何作用:(
答案 0 :(得分:7)
您可以使用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)