Python电子邮件负载解码

时间:2014-12-18 15:51:50

标签: python encoding

我知道这个问题已经被问了好几千次,但我接近紧张的休息时间,所以我忍不住寻求帮助。

我收到了法语口音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'
似乎没有任何作用:(

1 个答案:

答案 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)