我遇到了解析以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时的确切内容是“ Harmonogram 2018Ł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"
答案 0 :(得分:0)
尝试
from email.header import Header,decode_header,make_header
file_name=make_header(decode_header(part.get_filename()))