Python电子邮件负载解码

Rom*_*uin 2 python encoding

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

我有一封法语口音caractères的电子邮件.这句话是:

"céline:Berlin Annette:0633'.

python的电子邮件包发生了变化

':'on'= 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')
Run Code Online (Sandbox Code Playgroud)

通过它的charset解码它:

>>> 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')
Run Code Online (Sandbox Code Playgroud)

或解码后在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')
Run Code Online (Sandbox Code Playgroud)

我也试过urllib:

urllib.unquote(z)
'C=E9line =3A 00493039746784 Berlin Annette =3A 0633'
Run Code Online (Sandbox Code Playgroud)

似乎什么都没有用:(

fal*_*tru 7

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

>>> quopri.decodestring('C=E9line =3A 00493039746784 Berlin Annette =3A 0633')
'C\xe9line : 00493039746784 Berlin Annette : 0633'
Run Code Online (Sandbox Code Playgroud)

如果您decode=True转到Message.get_payload,它将为您做上述:

msg.get_payload(decode=True)
Run Code Online (Sandbox Code Playgroud)