2016-09-27 3 views
0

У меня есть строка с кодировкой слов из полученной почты. При разборе закодированного слова в Python3, я получил исключение кодекаPython: кодек gb2312 не может декодировать байты

«gb2312» не может декодировать байты в позиции 18-19: нелегальная многобайтный последовательность

воскресил из make_header метода.

from email.header import decode_header, make_header 

hdr = decode_header("""=?gb2312?B?QSBWIM34IMXMILP2IMrbICAgqEMgs8kgyMsg?=""") 
make_header(hdr) 

Синтаксический строка в кодировке в онлайн-инструментов, работает без проблем (http://dogmamix.com/MimeHeadersDecoder/). Любые предложения, что я делаю неправильно? Спасибо

ответ

1

Сообщение об ошибке сообщает, что байты в позиции 18-19 недействительны для этой кодировки.

decode_header просто извлекает кучу байтов и кодировку. make_header фактически пытается интерпретировать эти байты в этой кодировке и терпит неудачу, поскольку эти байты недействительны в этой кодировке.

Аналогично,

bash$ base64 -D <<<'QSBWIM34IMXMILP2IMrbICAgqEMgs8kgyMsg' | 
> iconv -f gb2312 -t utf-8 
A V 网 盘 出 售 
iconv: (stdin):1:18: cannot convert 

Так сообщение об ошибке просто говорит о том, что эти данные не действительны. Мы не можем сказать, без каких-либо данных, какие должны быть данные, и ни Python, ни ваша программа не могут это сделать.

Для грубой притчи вы можете использовать это, но не в? H ?? л? нг ?? ы ??? е ???.

+0

Возможно, закодированное слово действительно мусор. Я запутался в этом онлайн-инструменте, который (возможно) правильно отобразил эту строку. Также я получил тот же результат из Outlook. –

+0

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

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