保科です。

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

> 後藤@太陽計測です
> 
> 1行が単一のencoded-wordであれば 1+75で76が最大。
> 複数の encoded-wordがあったとしても、1行は76が最大。
> 結局1行は76文字以内ということです。

なんと。そうだったのですか。いままで何本かmailerを日本語に対応
させたけど、全部間違ってたわ(笑) わははは。

> JISベースでバイトストリームを扱おうとすると面倒ですが、エンコード対象
> 文字列を、バイトではなく「文字」単位で考え、MIMEエンコードする直前で
> iso-2022-jpにエンコード(ESC$Bなどの付加も含む)して考えるとよいと思います。

そうですね。これは御意です。

> ここはおっしゃる意図が良くわからないのですが。。。
> iso-2022-jpでのcharsetでは英数字は含みます。

え。そうなんですか。確かにHTMLなんかでは、charset=iso-2022-jpとか
いって、英数字もバンバン使っているワケですから、そういわれれば
そうですねぇ(笑)

> それから、RFC2047では、例えば "漢字file" というのは white-spaceで
> 区切られていないので、"=?iso-2022-jp?B?GyRCNEE7ehsoQg==?= file" と
> してはダメで、=?iso-2022-jp?B?GyRCNEE7ehsoQmZpbGU=?= といっしょに
> エンコードしなければなりません。そうしないと、decodeすると
>  "漢字 file"となってしまうからです。

私は"漢字 file"となってしまうので良いのだと今迄ず〜っと思っていました。
というか、これはencodeの対象となる文字列にもともと含まれていた空白と
encodeした結果、multiple header化せざるを得なかった場合に行頭に追加
される空白との判別ができないRFC2047の欠陥だ、と。

漢字file くらいの長さなら短かいので英数字をわけてencodeしたところで
1行に収まると思いますが、

日本語のサブジェクトにおけるrfc2047の実装について などという例だと

日本語のサブジェクトにおける で1行、rfc2047 は素通しで1行、
の実装について て1行の、計3行にしていました。当然decodeすると
日本語のサブジェクトにおける rfc2047 の実装について と空白が入って
しまいます。ところがイヂワルテストで

日本語のサブジェクトにおける   rfc2047   の実装について という例でも
rfc2047の前後の3つの空白は1つに丸まってしまいます。なもんで、あぁ、
なんかrfc2047ってザルだな、と自分のサルな解釈を棚に上げて思っていた
わけですわ(笑)

例えば、文字列自体に意味はありませんが、いろいろなMailerで

aあbいcうdえeおfかgきhくiけjこkさlしmすnせoそpたq

などというSubjectを送受信してみると、実に様々な実装があるのがわかります。

私としては、上記のようなSubjectでは、アルファベットに挟まれている
あいうえお は、それぞれ1文字がESC$BxxESC(Bなどのようになる以上、

Subject: a
 =?iso-2022-jp?B?...?=
 b
 …以下、延々続く
 q

となるようにencodeしていました。これをdecodeすると、当然ながら
a あ b い c う d え e... などと、空白入りとなって等価には復元できないのは
承知の上で、です。

しかし、英数字をスルーしないで一緒くたにencodeするのが正しい解釈
だったとわ… すると、OutLookなどは正しいんですね。

Re: [ruby-list:10802] Re: サブジェクトのエンコード

などというのも、後藤さんのおっしゃるencode方法だと、頭から=?...と
始めるわけで、とするとMLサーバなどではMIMEのデコード必須ですね。
そうしないと、replyの通し番号を取り除けずに(encodeされちゃってるから)

Re: [ruby-list:10806] Re: [ruby-list:10805] Re: [ruby-list:10804]
Re: [ruby-list:10803] Re: [ruby-list:10802] Re: サブジェクトのエンコード

などとなります(笑)

> #このへんはまじめに実装していないメーラーも多いのよね。
> 
> なので、半角がある個所で切れるわけではないです。

いや、今の今まで、半角(というと語弊があるので1バイトの英数字)はそのまま
素通しするのが*まじめ*なのだと思いこんでいたのです。

> そうやって逆向きに1発で計算しちゃおうとするとドツボにはまりますよ(^^;
> 適当な個所で切ってみて長ければ、短くする(ヘンな日本語)手順は
> 必ず必要だと思います。

それはもちろん。前回のメールは、単なる指針ですからご心配なく。
そのまま実装したわけではないので。

#全然rubyと関係なくて、ごめんなさい皆さん。

-- 
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