保科です。 On Fri, Nov 13, 1998 at 04:16:39PM +0900, Shun-ichi GOTO <gotoh / taiyo.co.jp> wrote: > 後藤@太陽計測です > > >>>>> From: Sinichiro Dezawa <dezawa / miya.fujifilm.co.jp> > > だめだ、作り直しだ。 > > 名前を rfc2047.rb にする、ってんで一応読んで見たら、 > > 1行76Byteではなくて、1行中のエンコード文字列長(合計)が76Byte > > だった。(いいのかな、それで) > > え? > 前者でいいと思うのですが、どこかそうでない記述がありました? > 前者を表すのは以下の記述なのですが。。 > エンコードした結果、encoded-wordを含む1行の長さが76文字を超えないように、 > という制約だけだと思いますが。実際にはmultiple header lineのための > 行頭の1文字の空白があるので、=?...?.?....?=の最大長は75charsだと。 ちょっと、うまく切れないので引用が長くなってしまいましたが、 Sinichiro Dezawa さんがおっしゃることと、後藤@太陽計測さんの おっしゃることって大意は同じですよね? Dezawaさんは、B encode 前の文字列を76bytes毎に切ってencodeする のではなく、encoded-word、つまり=?から?=までを76bytesにします、 というのを、いいのかな?それで、と疑問に思っておられると読めます。 > > 2. Syntax of encoded-words > ... > > While there is no limit to the length of a multiple-line header > > field, each line of a header field that contains one or more > > 'encoded-word's is limited to 76 characters. 後藤@太陽計測さんは、multiple header lineのための行頭の空白、えっと Non Linear White Spaceでしたっけ?を計算に入れて、75charsという 解釈のようですが、細かいことですが、私はやはり読んだとおりで、 encoded-wordの長さは76charsまで、つまり=?から?=までで76bytesだと 思います。 > エンコード後の長さが妥当になるような、元文の区切り点を見つける処理が面 > 倒だとは思いますが。 実際には =?iso-2022-jp?B?...?= という形のencoded wordになるわけですが iso-2022-jpだよ、と言う以上、それらしくESC$Bではじまって、ESC(Bなどで us-asciiなりJIS1バイト英数字なりに戻してやるのがお約束なのだろうとは 思います。 =?iso-2022-jp?B?...?= abc =?iso-2022-jp?B?...?= などという形式になるってことは、エスケープシーケンスはencoded wordの中です。 これって、フザケんなよ凸(-_-#)って感じですよねぇ。 iso-2022-jpというと、code set も encode method もJIS X 0208(でしたっけ?) をそのまま使いますが、2バイト文字集合だけで、1バイトカナは含まず、という ものだったと思うので、実際には、1バイトの英数字は含まないですよね。 思うにUnix系のユーザさんは英数字は1バイトの文字を使うかたがほとんどな ように見えるので、放っておいてもそこでencoded wordは切れることになるので 実際にはencoded wordの76bytesな縛りってのは効いてこないような気もします。 base64って3bytesが4bytesになる勘定ですから、え〜〜っと、 76 から =?iso-2022-jp?B? と ?= の分だけ引いて、58。4で割って14と2余り(笑) 14かける3で42。エスケープシーケンスの分6bytesを引くと、36。2で割って18。 半角カナの全角化をしないですむような素直なEUCの文字列とすると、18文字で 切って8bit目を立て、前後をESC hogeではさみ、B encodeして余りの2バイトは paddingということになるでしょうか。はぁ大変… -- 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