我正在尝试解码电子邮件主题标头。
我正在这样做(正则表达式用于在两个=之间添加一个空格:
header = '=?iso-8859-1?B?TU9UT1IubmwgbmlldXdzYnJpZWYgPiBOaWV1d2UgdmVya29vcHRvcHBl?==?iso-8859-1?B?ciBTdXp1a2kg?='
header = re.sub(r"(==)(?!$)", u"\0= =", header)
email.header.decode_header(header)
但这会引发HeaderParseError:
HeaderParseError Traceback (most recent call last)
/home/leon/<ipython console> in <module>()
/usr/lib/python2.7/email/header.pyc in decode_header(header)
106 # now we throw the lower level exception away but
107 # when/if we get exception chaining, we'll preserve it.
--> 108 raise HeaderParseError
109 if dec is None:
110 dec = encoded
有趣的是,如果我将re.sub()的输出复制到剪贴板中并执行以下操作:
email.header.decode_header('=?iso-8859-1?B?TU9UT1IubmwgbmlldXdzYnJpZWYgPiBOaWV1d2UgdmVya29vcHRvcHBl?= =?iso-8859-1?B?ciBTdXp1a2kg?=')
有用!
所以我想re.sub()的编码有问题,但是我不知道如何解决。
最佳答案
在示例中,RFC2047令牌之间没有空格,这是行不通的。但是,您尝试修复它也不正确;您应该替换为u"= ="
,而不是u"\0= ="
。
如果您能够找到此类错误的根源并进行更正,而不是随后最多根据对数据应该是什么的良好猜测进行修复,那就更好了。
关于python - email.header.decode_headers()引发HeaderParseError,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7384006/