python中的HeaderParseError

python中的HeaderParseError,python,email-parsing,Python,Email Parsing,如果我在Python2.6.5(和2.7)中尝试使用decode_header()解析这个字符串,就会得到HeaderParseError。下面是字符串的repr(): '=?iso-8859-1?B?QW5tZWxkdW5nIE5ldHphbnNjaGx1c3MgU_xkcmluZzNwLmpwZw==?=' 此字符串来自包含JPEG图片的mime电子邮件。雷鸟罐头 解码文件名(其中包含德语umlauts) >>从email.header导入解码\u头 >>>解码头('=?iso-8859

如果我在Python2.6.5(和2.7)中尝试使用decode_header()解析这个字符串,就会得到HeaderParseError。下面是字符串的repr():

 '=?iso-8859-1?B?QW5tZWxkdW5nIE5ldHphbnNjaGx1c3MgU_xkcmluZzNwLmpwZw==?='
此字符串来自包含JPEG图片的mime电子邮件。雷鸟罐头 解码文件名(其中包含德语umlauts)

>>从email.header导入解码\u头
>>>解码头('=?iso-8859-1?B?QW5TZWXKDW5NIE5LDHPBNNJAGX1C3MGU_XKCMLUZNWLMPWZW==?=)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“/usr/lib64/python2.6/email/header.py”,第101行,在解码头中
抬起头
email.errors.HeaderParseError

Python的base64编码字符串字符集与mail agent的字符集之间似乎不兼容:

>>> from email.header import decode_header
>>> a='QW5tZWxkdW5nIE5ldHphbnNjaGx1c3MgU_xkcmluZzNwLmpwZw=='
>>> decode_header(a)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/email/header.py", line 108, in decode_header
    raise HeaderParseError
email.errors.HeaderParseError
>>> a1= a.replace('_', '/')
>>> decode_header(a1)
[('Anmeldung Netzanschluss S\xecdring3p.jpg', 'iso-8859-1')]
>>> print _[0][0].decode(_[0][1])
Anmeldung Netzanschluss Südring3p.jpg
>>从email.header导入解码\u头
>>>a='qw5tzwxkdw5nie5ldhpbnnjagx1c3mguxkcmluzznwlmpwzw='
>>>解码头(a)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“/usr/lib/python2.7/email/header.py”,第108行,在解码头中
抬起头
email.errors.HeaderParseError
>>>a1=a.替换(“',“/”)
>>>解码头(a1)
[('Anmeldung Netzanschluss S\xecdring3p.jpg','iso-8859-1')]
>>>打印[0][0]。解码([0][1])
Anmeldung Netzanschluss Südring3p.jpg
Python利用了建议的字符集(即0-9、A-Z、A-Z、+、/)。在同一篇文章中,包含了一些备选方案(包括这里的下划线);但是,下划线的值是模糊的(它的值是62或63,取决于备选方案)

我不知道Python能做些什么来猜测b0rken邮件代理的意图;因此,我建议您在
解码头失败时进行一些适当的猜测


我之所以调用“断开”邮件代理,是因为不需要在邮件头中转义
+
/
:它不是URL,为什么不使用典型的字符集?

我创建了一个票据,因为我认为python应该能够解析mime电子邮件中的base64 url编码头:……如果我先检查链接的python问题,我就可以节省调试时间:-|
>>> from email.header import decode_header
>>> a='QW5tZWxkdW5nIE5ldHphbnNjaGx1c3MgU_xkcmluZzNwLmpwZw=='
>>> decode_header(a)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/email/header.py", line 108, in decode_header
    raise HeaderParseError
email.errors.HeaderParseError
>>> a1= a.replace('_', '/')
>>> decode_header(a1)
[('Anmeldung Netzanschluss S\xecdring3p.jpg', 'iso-8859-1')]
>>> print _[0][0].decode(_[0][1])
Anmeldung Netzanschluss Südring3p.jpg