在Python中转换经latin-1编码的UTF-8字符串

时间:2019-02-14 13:27:16

标签: python string character-encoding

我正在使用Python 2.x库email来迭代一些.eml文件,但是我安装了Python3.x。

我使用.get_filename()在每个有效负载(附件)的头中提取文件名。标头中未设置编码,因此我相信Python 3.x将返回的string解释为utf-8string看起来像这样,当它包含特殊字符(例如,如“ø”:

=?ISO-8859-1?Q?Sp=F8rgeskema=2Edoc?=

我无法通过多种方式将此字符串转换为utf-8并将其转换为字节,然后使用latin-1ISO-8859-1进行解编码(尽管应该相同), utf-8

我也尝试使用:

ast.literal_eval(r"b'=?ISO-8859-1?Q?Sp=F8rgeskema=2Edoc?='")

并将其解码,但它仍会返回包含编码字符的原始字符串。

该如何处理?

1 个答案:

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