[Python-ml-jp 5040] メールの日本語件名を記述通り復元するには?
十河 満
coolhead @ a1.mbn.or.jp
2010年 9月 26日 (日) 10:13:24 JST
ソガワと申します。また教えて下さい。
日本ではメール送信時に、ISO-2022-JP+base64で文字エンコードして7-bit文字
にするのが一般的ですが、逆にこれを戻す際に *white space* の問題で、記述
通り復元できるか疑問になって質問します。
(1) 半角空白の扱い方はどうすれば良いのでしょうか?
私のメーラー(Thunderbird 3.1.4)では、"Python メーリングリスト Japan" は
*SJ0* のように変換されるので、これを email.Header.decode_header(SJ0) す
ると、結果は得られますが半角空白が失われます。
逆にThunderbird 3.1.4 では、*SJ0* 〜 *SJ4* をそのまま件名に記述すると
半角空白文字も有効となって正しく受信できます。
(2) decode_header の終タグの判定は *white space* を含めてる?
次に、*SJ3*, *SJ4*のように、終タグ(?=)の直後に半角文字があると、
email.Header.decode_header(SJx) はデコードしないようです。
無理やり終タグの後ろにタブ文字("\t")を埋め込んでますが・・・
(3) 規定の解釈はどうなってるのでしょうか?
RFC2822ではどのように規定してるのでしょうか? グレーでしょうか?
(ソースコードのインデントには全角スペースを使用してます。)
#!/usr/bin/python
# -*- coding: utf-8 -*-
import email
SJ0 = "Python =?ISO-2022-JP?B?GyRCJWEhPCVqJXMlMCVqJTklSBsoQiBKYXBhbg==?="
SJ1 = "Python =?ISO-2022-JP?B?GyRCJWEhPCVqJXMlMCVqJTklSBsoQg==?= Japan"
SJ2 = "Python=?ISO-2022-JP?B?GyRCJWEhPCVqJXMlMCVqJTklSBsoQg==?= Japan"
SJ3 = "Python =?ISO-2022-JP?B?GyRCJWEhPCVqJXMlMCVqJTklSBsoQg==?=Japan"
SJ4 = "Python=?ISO-2022-JP?B?GyRCJWEhPCVqJXMlMCVqJTklSBsoQg==?=Japan"
def test(subj):
print "="+"0123456789"*4
for txt, enc in email.Header.decode_header(subj):
if enc:
txt_sjis = unicode(txt, enc).encode("shift-jis")
else:
txt_sjis = txt
print (">"+txt_sjis+"<").ljust(32), enc
if __name__ == "__main__":
print "* SJ1 *"; test(SJ1)
print "* SJ2 *"; test(SJ2)
print "* SJ3 *"; test(SJ3)
print "* SJ4 *"; test(SJ4)
c:\Users\SomethingCool\Dlib\Python\wince_v10\slmc2>python Test.py
* SJ0 *
=0123456789012345678901234567890123456789
>Python< None
>メーリングリスト Japan< iso-2022-jp
* SJ1 *
=0123456789012345678901234567890123456789
>Python< None
>メーリングリスト< iso-2022-jp
>Japan< None
* SJ2 *
=0123456789012345678901234567890123456789
>Python< None
>メーリングリスト< iso-2022-jp
>Japan< None
* SJ3 *
=0123456789012345678901234567890123456789
>Python =?ISO-2022-JP?B?GyRCJWEhPCVqJXMlMCVqJTklSBsoQg==?=Japan< None
* SJ4 *
=0123456789012345678901234567890123456789
>Python=?ISO-2022-JP?B?GyRCJWEhPCVqJXMlMCVqJTklSBsoQg==?=Japan< None
c:\Users\SomethingCool\Dlib\Python\wince_v10\slmc2>
以上、宜しくお願い致します。
Python-ml-jp メーリングリストの案内