Форум сайта python.su
В 2.7 это баг - http://stackoverflow.com/questions/20816766/python-email-header-decode-header-fails-for-multiline-headers
Решение так и не найдено. Есть ли возможность какими-то другими путями решить данную проблему? Нужно именно для 2.7.
Отредактировано Master_Sergius (Дек. 22, 2016 22:48:40)
Офлайн
Чистый email.header.decode_header() без каких-то действий неприменим. В диком мире заголовки бывают неправильно закодированы, бывают оборванными на середине. В любом случае нужна своя функция, которая раскодирует заголовок, в том числе и с помощью email.header.decode_header(). А вот эти MIME-части хорошо можно отличить от остального содержимого с помощью регулярок и просто их отдельно раскодировать и вставить результат обратно, будто их и не было изначально. Но даже в этом случае там не так всё просто, потому что бывают левые кодировки, а бывает, что и кодировка не определяется. Я писал функцию в своей проге. Пока тестами не обложил её вдоль и поперёк, всё время где-то вылазила ошибка при раскодировании (приходило какое-нибудь новое письмо - и до свидания, программа выпадала). Запутанная функция получилась.
def _decode_header(self, header):
# дано : заголовок и кодировка сообщения
# получить: ответ = раскодированный заголовок
# (если раскодирование невозможно,
# ответ = первоначальный заголовок)
res = ''
defenc = 'latin1'
for i in email.header.decode_header(header):
t, e = i
if e:
if e != 'unknown-8bit':
s = t.decode(e)
else:
s = t.decode(self._charset or defenc)
else:
if isinstance(t, str):
s = t
elif re.search(br'\\u[\da-f]{4}', t):
s = t.decode('unicode_escape')
else:
s = t.decode(defenc)
res += s
return res
Отредактировано py.user.next (Дек. 23, 2016 07:34:00)
Офлайн
посмотрите исходники либы
https://github.com/martinrusev/imbox
Офлайн