3

在我的 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解析,但雷鸟可以。它是由 KMail/1.11.4 创建的

如何在 Python 2.7 中解析第一个带有变音符号的标头?

4

1 回答 1

2

根据RFC 2047

“编码字”不得出现在“引用字符串”中。

根据RFC 822的“引用字符串”是

引用字符串 = <"> *(qtext/quoted-pair) <">; 常规 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')]
于 2012-10-17T14:06:04.717 回答