ISO 8859-1文件名不解码(ISO 8859-1 filename not decoding)

2019-06-26 13:11发布

我在Python雄鱼提取MIME消息的文件,我整个问题进行命名这些文件运行:

=?ISO-8859-1 Q +认证5FZonificaci = = = F3N 5F2010 2Epdf =?=

我似乎无法在这个名字解码成UTF。 为了解决现有ISO-8859-1的问题,我开始传递所有文件名给这个函数:

def unicodeConvert(self, fname):
    normalized = False

    while normalized == False:
        try:
            fname  = unicodedata.normalize('NFKD', unicode(fname, 'utf-8')).encode('ascii', 'ignore')
            normalized = True
        except UnicodeDecodeError:
            fname = fname.decode('iso-8859-1')#.encode('utf-8')
            normalized = True
        except UnicodeError:
            fname = unicode(fname.content.strip(codecs.BOM_UTF8), 'utf-8')
            normalized = True
        except TypeError:
            fname = fname.encode('utf-8')

    return fname

这是工作,直到我得到这个文件名。

想法是赞赏一如既往。

Answer 1:

你的字符串使用编码的引用可打印的格式MIME头。 该email.header模块为您处理此:

>>> from email.header import decode_header
>>> try:
...     string_type = unicode  # Python 2
... except NameError:
...     string_type = str      # Python 3
...
>>> for part in decode_header('=?ISO-8859-1?Q?Certificado=5FZonificaci=F3n=5F2010=2Epdf?='):
...     decoded = string_type(*part)
...     print(decoded)
...
Certificado_Zonificación_2010.pdf


文章来源: ISO 8859-1 filename not decoding