在我的MUA(Thunderbird 15.0.1)中,两个邮件主题都显示如下:
Keine Mail zu "Abschlagsänderung" gefunden
这是一个重现它的片段:
import email
for subject in ['Subject: Re: Keine Mail zu "=?utf-8?q?Abschlags=C3=A4nderung?=" gefunden',
'Subject: =?utf-8?q?Keine_Mail_zu_=22Abschlags=C3=A4nderung=22_gefunden?=']:
msg=email.message_from_string(subject)
print email.Header.decode_header(msg.get('subject'))
输出:
[('Re: Keine Mail zu "=?utf-8?q?Abschlags=C3=A4nderung?=" gefunden', None)]
[('Keine Mail zu "Abschlags\xc3\xa4nderung" gefunden', 'utf-8')]
第一个头不能被python解析,但是thunderbird会解析。它是由KMail / 1.11.4
创建的如何在Python 2.7中解析带有元音符的第一个标题?
答案 0 :(得分:2)
根据RFC 2047,
“编码字”绝不能出现在“引用字符串”中。
根据RFC 822的'quoted-string'是
quoted-string =<“> *(qtext / quoted-pair)<”&gt ;;常规qtext或引用的字符。
所以我认为Python库是正确的,如
"=?utf-8?q?Abschlags=C3=A4nderung?="
是带引号的字符串。使用最少报价的更好的替代方案是
=?utf-8?q?=22Abschlags=C3=A4nderung=22?=
将"
编码为=22
。
您可以将"
替换为=?utf-8?q?=22?=
:
>>> email.Header.decode_header('=?utf-8?q?=22?= =?utf-8?q?Abschlags=C3=A4nderung?= =?utf-8?q?=22?=')
[('"Abschlags\xc3\xa4nderung"', 'utf-8')]