保科です。私も続けちゃいますが…

On Fri, Nov 13, 1998 at 08:07:45PM +0900,
Shun-ichi GOTO <gotoh / taiyo.co.jp> wrote:

> 後藤@太陽計測です
> 
> Rubyには直接関係ない内容なのですが、
> ちょっと誤解があるようなので。。。

いや、だいぶ誤解してました(笑) というか、私がB encodeとかほげって
いたのは、2047が出るよりも前だったような気が。わはは。
いや〜勉強になりましたよ。長年の疑問が氷解したっつ〜か。

> また、自分で読みなおしてもおもうのですが、なんか、エラそうな文面に見え
> ましたら、ごめんなさい。そんなジンブツじゃないのは確かです。

い〜え、ちっともエラそうじゃないと(少なくとも)私は思いますよ。
たいしたジンブツでないのは、こちらも同じです(笑)

> # RFC2047では、英語圏の文化のせいなのかわかりませんが、「ワードの区切り
> # に空白はふつ〜あるだろ」みたいな前提があるような印象を受けます。
> ## 邪推でしかないですが :-)

私も思います。それを前のメールでは「欠陥なんじゃねぇのか」などと
書いたわけで。十分ではない、とかザルだ、とか、どうにでも言いようは
ありますが…

> Becky!などはそういう感じのようですね。(現バージョンはどうかな?)

Becky!というのは使ったことないのですが、モヂラなんかだと今でも
こうかも知れませんね。ずっと昔からこうなんぢゃ…(笑)

> えぇと、これはちがいます。いっしょにエンコードするのは、必要最小限に
> すべきなので、上記場合は
> 
> [FLIMの場合]
> Re: [ruby-list:10802] Re: =?ISO-2022-JP?B?GyRCJTUlViU4JScbKEI=?=
>   =?ISO-2022-JP?B?GyRCJS8lSCROJSglcyUzITwlSRsoQg==?=
> 
> とか、
> 
> [Mewの場合]
> Subject: Re: [ruby-list:10802] Re:
>  =?iso-2022-jp?B?GyRCJTUlViU4JSclLyVIJE4lKCVzJTMhPCVJGyhC?=
> 
> とかなります。ここは、Re:の後ろの空白をちゃんと使えるので、チャンと保存
> され、問題無いわけです。くっついちゃってる個所はいっしょにエンコード
> しないといけないという話しなわけです。

ちょっと長く引用しちゃいましたが、ここです、私がいままでうむ〜と
思っていたのは。要するに私の陥っていた誤りは、「必要最小限のencodeで
済むなら済まそう」という発想が出てこなかったこと、iso-2022-jpをb64で
扱う際に、英数字を含まずに考えていた(笑)こと、です。

裏返すとですね、encodeできる範囲はなにがなんでもencodeしちゃうぞ的な
考えに陥いると、上記のような例ですと、Subject全体をゴロンと1つの
encoded wordにできちゃうわけですよね。確かにiso-2022-jpだしB encode
だし、encoded wordそのものには嘘はないわけで。

で、そらいかにもまずかろう、てんで、JISのESCで囲まれているところだけ
encodeして済ましていたのでした。昔ね。

頭から順送りに見て、encodeしないで済むところは読み飛ばし、encodeが
必要なのが確定した時点で、そこから前後にencode対象となる範囲を伸ばし、
encoded wordの長さを確定する、という感じでしょうか?

0x1Bを見つけた時点で、この先はencodeが必要だ、などと判断するのでしょうが
その前の部分には空白をはさまないで英数字がひっついてるかも知れませんから、
そのさらに前の空白を見つけるか、文字列の先頭まで戻りながら見るのでしょう。
そうしないと、本当のencode開始位置が定まりませんよね。

つまり、文字コードの切り替えシーケンスはencode wordに必ず含まれますが
そのencoded wordの開始・終了と文字コードの切り替えは1対1ではないと。

encoded wordの長さが計算可能になった時点で、今度は例の75bytesに合せて
近似値までがんばるなり、真中で割るなり… という感じで処理する、という
感じですかねぇ。

実際、76bytesというのは越えなきゃいいわけで、長いから半分にしとけ、
でもいいと思います。苦労して75bytesに近づけようとするあまり複雑に
なったりバグがまぎれこんだりするよりも。

> > Re: [ruby-list:10806] Re: [ruby-list:10805] Re: [ruby-list:10804]
> > Re: [ruby-list:10803] Re: [ruby-list:10802] Re: サブジェクトのエンコード
> > 
> > などとなります(笑)
> 
> というわけで、そうはならないわけです。(^^;

御意です。やはり腐っていたのですね(笑) あ〜よかった(なにが?)

-- 
Toru Hoshina
Network Associates,Inc.
Pacific Rim, Software Engineer.
http://www.best.com/~hoshina
PGP fingerprint : 95 73 1C 26 C6 9E 28 86  BA 32 34 CA FC 9B DC 6D