无法解码gmail中的特殊字符 - python 3.6
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无法解码gmail中的特殊字符 - python 3.6相关的知识,希望对你有一定的参考价值。
我制作了一个程序,该程序接收来自Gmail帐户的电子邮件,并保存其信息,特别是电子邮件的名称发件人,主题和正文作为纯文本。
我将此信息作为字符串获取,但问题是解码无法识别特殊字符,如重音符号。我尝试用UTF-8,iso-8859-1和latin-1解码电子邮件的字节内容,但我无法正确解码特殊字符。
这是我的代码和一些打印示例。
result, email_data = mail.uid('fetch', latest_email_uid, '(RFC822)')
raw_email = email_data[0][1]
raw_email_string = raw_email.decode('iso-8859-1')
email_message = email.message_from_string(raw_email_string)
cuerpomensaje = email_message.get_payload()[0]
body = cuerpomensaje.get_payload()
textoplano = None
if type(body) == list:
textoplano = body[0].get_payload()
elif type(body) == str:
textoplano = body
emisor = email_message['From']
print(email.utils.parseaddr(emisor)[0])
print(email_message['Subject'])
print(textoplano)
打印时,我得到了这个:
=?UTF-8?Q?Andr=C3=A9s?=
=?UTF-8?Q?=C3=A1rbol_de_la_tierra?=
palabras con tilde como =C3=A1rbol
但我应该得到这个:
Andrés
árbol de la tierra
palabras con tilde como árbol
答案
import re
import urllib.parse
def decode(text):
if text.startswith('=?UTF-8?Q?') and text.endswith('?='):
text = re.search('=?UTF-8?Q?(.*)?=', text).group(1)
return urllib.parse.unquote(text.replace('=', '%'))
结果:
print(decode('=?UTF-8?Q?Andr=C3=A9s?='))
>>> Andrés
print(decode('=?UTF-8?Q?=C3=A1rbol_de_la_tierra?=').replace('_', ' '))
>>> árbol de la tierra
print(decode('palabras con tilde como =C3=A1rbol'))
>>> palabras con tilde como árbol
您还可以使用包email.header
from email.header import decode_header
s, d = decode_header('=?UTF-8?Q?=C3=A1rbol_de_la_tierra?=')[0]
print(s.decode(d))
以上是关于无法解码gmail中的特殊字符 - python 3.6的主要内容,如果未能解决你的问题,请参考以下文章
如何使用带有编解码器值的 python .replace 来删除特殊字符?
无法以正确的格式、gmail api 和 ae.net.mail 对特殊字符电子邮件进行编码
'utf-8'编解码器无法解码位置1中的字节0xf4:无效的连续字节