Кажется несовместимость между набором символов Python для строк в кодировке base64 и почтовым агентом:
>>> from email.header import decode_header
>>> a='QW5tZWxkdW5nIE5ldHphbnNjaGx1c3MgU_xkcmluZzNwLmpwZw=='
>>> decode_header(a)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/email/header.py", line 108, in decode_header
raise HeaderParseError
email.errors.HeaderParseError
>>> a1= a.replace('_', '/')
>>> decode_header(a1)
[('Anmeldung Netzanschluss S\xecdring3p.jpg', 'iso-8859-1')]
>>> print _[0][0].decode(_[0][1])
Anmeldung Netzanschluss Südring3p.jpg
Python использует набор символов, который предлагает статья * Википедии (т.е. 0-9, A-Z, a-z, +, /). В той же статье, некоторые альтернативы (в том числе подчеркивание, что проблема здесь) включены; однако значение подчеркивания является расплывчатым (это значение 62 или 63, в зависимости от альтернативы).
Я не знаю, что Python может сделать, чтобы угадать намерения почтовых агентов b0rken; поэтому я предлагаю вам сделать соответствующие предположения всякий раз, когда decode_header
не удается.
Я называю «сломанным» почтовый агент, потому что нет необходимости экранировать либо +
, либо /
в заголовке сообщения: это не URL, так почему бы не использовать типичный набор символов?