2011-07-04 18 views
4

python 2.6.5(および2.7)のdecode_header()でこの文字列を解析しようとすると、HeaderParseErrorが発生します。ここでは文字列のrepr()はHeaderParseError in python

です。
'=?iso-8859-1?B?QW5tZWxkdW5nIE5ldHphbnNjaGx1c3MgU_xkcmluZzNwLmpwZw==?=' 

この文字列は、JPEG画像を含むMIMEメールから来ています。 Thunderbirdは ファイル名(ドイツ語のウムラウトを含む)をデコードできます。

>>> from email.header import decode_header 
>>> decode_header('=?iso-8859-1?B?QW5tZWxkdW5nIE5ldHphbnNjaGx1c3MgU_xkcmluZzNwLmpwZw==?=') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/lib64/python2.6/email/header.py", line 101, in decode_header 
    raise HeaderParseError 
email.errors.HeaderParseError 
+0

私はpythonがmime電子メールのbase64-urlエンコードヘッダを解析できるはずだと思ったので、チケットを作成しました:http://bugs.python.org/issue12489 – guettli

答えて

1

base64でエンコードされた文字列に設定されたPythonの文字やメールエージェントの間の非互換性思わ:

>>> 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は文字がWikipedia article(すなわち0-9、AZ、AZを示唆していることを設定し利用、+、/)。その同じ記事では、いくつかの選択肢(ここで問題となっているアンダースコアを含む)が含まれています。しかし、アンダースコアの値はあいまいです(代替値に応じて値62または63)。

私は、Pythonがb0rkenメールエージェントの意図を推測するために何ができるのか分かりません。 decode_headerが失敗するたびに適切な推測を行うことをお勧めします。

メッセージヘッダーで+または/のいずれかをエスケープする必要がないため、メールエージェントを「壊れた」と呼びます。これはURLではないため、一般的な文字セットを使用しないのはなぜですか?

+0

...リンクされたPythonの問題を最初にチェックした場合、デバッグ時間を節約できました: - | – tzot