我知道这个问题已被问了好几千次,但我接近紧张的休息,所以我忍不住寻求帮助.
我有一封法语口音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)
似乎什么都没有用:(
您可以使用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)
| 归档时间: |
|
| 查看次数: |
3766 次 |
| 最近记录: |