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 では解析できませんが、thunderbird では解析できます。KMail/1.11.4 で作成されました

Python 2.7 で最初のヘッダーをウムラウトで解析するにはどうすればよいですか?

4

1 に答える 1

2

RFC 2047によると、

'encoded-word' は 'quoted-string' 内に現れてはなりません (MUST NOT)。

RFC 822によると、「引用文字列」は次のとおりです。

引用文字列 = <"> *(qtext/引用ペア) <">; 通常の 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 に答える