email.header.decode_headers () выбрасывает HeaderParseError - PullRequest
1 голос
/ 12 сентября 2011

Я пытаюсь декодировать заголовки тем письма.

Я делаю это (регулярное выражение для добавления пробела между двумя = *:

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 (), но я не знаю, как это исправить.

1 Ответ

2 голосов
/ 12 сентября 2011

Вам не хватает пробела между токенами RFC2047 в примере, который не работает. Ваша попытка исправить это, однако, также неверна; вы должны заменить на u"= =", а не u"\0= =".

Было бы гораздо лучше, если бы вы могли найти источник таких ошибок и исправить их, а не пытаться исправить их впоследствии, основываясь в лучшем случае на хороших предположениях о том, какими должны быть ваши данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...