Найти - Пользователи
Полная версия: Декодирование многострочного заголовка письма. Python 2.7
Начало » Python для экспертов » Декодирование многострочного заголовка письма. Python 2.7
1
Master_Sergius
В 2.7 это баг - http://stackoverflow.com/questions/20816766/python-email-header-decode-header-fails-for-multiline-headers

Решение так и не найдено. Есть ли возможность какими-то другими путями решить данную проблему? Нужно именно для 2.7.
py.user.next
Чистый 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

И это третий питон, как ты говоришь, у которого всё в порядке с этой функцией.
ZerG
посмотрите исходники либы
https://github.com/martinrusev/imbox
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB