2013-05-20 1 views
1

Я получаю письма от IMAP с помощью Python и imaplib. В этом конкретном случае у меня проблема с адресами To:.Невозможно декодировать кодировку - Python и imaplib

Я извлекаю закодированное поле Кому: разделяю адреса, а затем пытаюсь их декодировать. У меня есть проблема с этой конкретной строкой. Я использую функцию decode_header Python для декодирования кодировки Quoted-Printable/Base64. Я начинаю с закодированными:

'=?utf-8?b?vmfzy28gugf0csoty2lv?= <[email protected]>' 

Это должно быть Vasco Patrício <[email protected]> (мое имя и адрес электронной почты). Как и ожидалось, decode_header возвращает набор закодированных подстрок и их кодировок, что приводит в массиве 2 кортежей:

[('\xbeg\xf3\xcbo \xba\x07\xf4r\xca-\xcbio', 'utf-8'), ('<[email protected]>', None)] 

Однако, когда я пытаюсь декодировать первый кортеж, используя этот очень простой код:

for part in decoded_parts: 
    if part[1]: 
     part_text = part[0].decode(part[1]) 
    else: 
     part_text = part[0] 

я получить UnicodeDecodeError:

UnicodeDecodeError at /api/refresh/emails/ 
'utf8' codec can't decode byte 0xbe in position 0: invalid start byte 

Я подтверждаю, что пытается расшифровать его с помощью результатов консоли в то же исключение.

Не предполагается ли decode_header возвращать действующие дезадаптируемые строки вместе с их кодировками?

Спасибо

ответ

2

Вы потеряли капитализацию где-то.

Правильная закодированная строка =?utf-8?b?VmFzY28gUGF0csOtY2lv?=. Кажется, что у вас одно и то же, но все в нижнем регистре.

Поскольку Base64 чувствителен к регистру (он использует 26 строчных букв, 26 букв в верхнем регистре, 10 цифр и два других символа для составления 64 букв), нижняя часть его, конечно, полностью сломает.

+0

Я вижу. Фактически я уменьшал регистр из-за обнаружения строк, например, для заголовка 'To:' он может быть 'to:', 'TO:' или любая перестановка. Таким образом, я был более низким, чтобы облегчить поиск. Я никогда не думал, что это сломает кодировку - и я никогда бы не подумал об этом сам. Спасибо за ценный вклад! –

 Смежные вопросы

  • Нет связанных вопросов^_^