我正在使用Python 2.x库email
来迭代一些.eml文件,但是我安装了Python3.x。
我使用.get_filename()
在每个有效负载(附件)的头中提取文件名。标头中未设置编码,因此我相信Python 3.x将返回的string
解释为utf-8
。 string
看起来像这样,当它包含特殊字符(例如,如“ø”:
=?ISO-8859-1?Q?Sp=F8rgeskema=2Edoc?=
我无法通过多种方式将此字符串转换为utf-8
并将其转换为字节,然后使用latin-1
,ISO-8859-1
进行解编码(尽管应该相同), utf-8
。
我也尝试使用:
ast.literal_eval(r"b'=?ISO-8859-1?Q?Sp=F8rgeskema=2Edoc?='")
并将其解码,但它仍会返回包含编码字符的原始字符串。
该如何处理?
答案 0 :(得分:2)
您正在处理电子邮件,因此可以使用电子邮件处理功能:
尝试使用https://docs.python.org/3.5/library/email.header.html。 最后一个示例(第二个示例,非常小的模块:
>>> from email.header import decode_header
>>> decode_header('=?iso-8859-1?q?p=F6stal?=')
[(b'p\xf6stal', 'iso-8859-1')]
还有python 2.7的版本。
所以对于您的情况:
subj = '=?ISO-8859-1?Q?Sp=F8rgeskema=2Edoc?='
subject, encoder = email.header.decode_header(subj)[0]
print(subject.decode(encoder))