我遇到了解析用html url编码编码的文件名的问题 .

Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename*0*=utf-8''%48%61%72%6D%6F%6E%6F%67%72%61%6D;
 filename*1*=%32%30%31%38%20%C5%81%75%6B%61%73%7A%65%77;
 filename*2*=%61%20%33%35%2E%70%64%66

在get_filename之后,它返回已使用扩展ASCII字符解码的文件名 . 在那种情况下 decode_header 不能再处理了 . 这是例外:

File "/usr/lib/python2.7/email/header.py", line 73, in decode_header
header = str(header)
UnicodeEncodeError: 'ascii' codec can't encode character u'\u0141' in position 26: ordinal not in range(128)

这是获取文件名的一段代码:

for part in msg.walk():
        if part.get_content_maintype() == 'multipart':
            continue
        content = part.get_payload(decode=True)
        if content:
            filename = part.get_filename()
            if filename:
                filename = decode_header(filename)
                [...]

所有其他正常编码似乎都有效 . 有什么问题,有时get_filename返回解码后的字符串或编码 . 你能告诉我怎么解决这个问题?


我收到UnicodeError时的确切内容是“Harmonogram2018Łukaszewa35.pdf”

第二条消息包含并且它正在工作:

Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="To =?UTF-8?b?Y8OzxbwsIMW8ZQ==?= ze Szwecji, to nic,
=?UTF-8?b?xbxl?= ze Szwecji..xlsx"