Это кодированное слово RFC2047.Вы можете частично декодировать его с помощью пакета email
, хотя впоследствии его все равно нужно соединить:
import email.header
def parseHeader(h):
return ''.join(s.decode(c or 'us-ascii') for s, c in email.header.decode_header(h))
>>> parseHeader('=?ISO-8859-1?B?WnVtQnL8Y2tlbndpcnTcYmVyR3L8bndhbGRadXL8Y2soMikuZ3B4?=')
u'ZumBr\xfcckenwirt\xdcberGr\xfcnwaldZur\xfcck(2).gpx'
Однако, совершенно неправильно использовать закодированное слово вfilename="..."
параметр для Content-Disposition
во вложении.RFC2047 прямо заявляет, что закодированное слово не может появляться в кавычках.Предполагается, что значения не-ASCII-параметров должны передаваться с использованием правил RFC2231, которые выглядят совершенно по-разному (и очень сложными).
Таким образом, согласно почтовому стандарту, вы должны трактовать это имя файла как буквально «=?ISO-8859-1? B? WnVtQnL8Y2tlbndpc ...».Я верю, что MS Exchange порождает эту чушь.Постарайтесь свести эту обработку к минимуму (например, путем декодирования, только когда строка обернута в =?...?=
, что маловероятно для имени файла.