1

我正在尝试解码电子邮件主题标头。

我正在这样做(正则表达式用于在两个 = 之间添加空格:

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() 的编码有问题,但我不知道如何解决这个问题。

4

1 回答 1

2

您在示例中的 RFC2047 令牌之间缺少空格,这不起作用。但是,您尝试修复它也是不正确的;您应该替换为u"= =",而不是u"\0= ="

如果您能找到此类错误的根源并进行纠正,而不是事后尝试根据对您的数据应该是什么的正确猜测来修复它,那会好得多。

于 2011-09-12T06:25:44.793 回答