後藤@太陽計測です

base64.rbのためにも、続けちゃいます (._.)>

#私自身はRFC2047は「欠陥がある」というよりは「十分でない」というくらい
#に感じてるです。(間違った解釈している可能性も大ではありますが)


>>>>> at Fri, 13 Nov 1998 21:56:01 +0900
>>>>> dezawa <dezawa / miya.fujifilm.co.jp> said,

dezawa> 1 ○1行の文字長の最大は、エンコードのみ、エンコードなしのみ、
dezawa>      そのごちゃまぜ含め、行頭の空白を含めて 76Byte。
dezawa>    ×1行76Byteではなくて、1行中のエンコード文字列長(合計)が76Byte

これは先のメールに書いたとおりかと。


dezawa> 2 ?"漢字file" は空白が無いから、全体をまとめて エンコードすべし。
dezawa>       英数字をスルーしないで一緒くたにencodeするのが正しい解釈

これが「空白保存の問題」かと思います。

Section 5 の (1)で

>    Ordinary ASCII text and 'encoded-word's may appear together in the
>    same header field.  However, an 'encoded-word' that appears in a
>    header field defined as '*text' MUST be separated from any adjacent
>    'encoded-word' or 'text' by 'linear-white-space'.

とあるため、encoded-word と それ以外のテキストとの間には liner-white-space
がMUSTなので。逆に、"漢字" と "file"に分けて前者のみをエンコードすると、
間にliner-white-spaceを入れねばならず、とすると、decode時に空白が取り除け
ない以上、原文と同じにならないじゃないか。じゃぁ、いっしょにエンコード
しなければならないじゃないか。という結論が導かれるわけです。

RFC2047には「分けてはいけない」とか、われわれが知りたいケースについて
は書いてありません。そういう明確な例がありませんし、分割のアルゴリズム
も提示していません。そこいらへんを考慮してくれてるのかいな? と、疑っ
てしてしまいたくもなります。

#そのあたりが、「word間にスペースはフツーあるでしょ」的な雰囲気を
#感じる点です。


dezawa>    ?いっしょにエンコードするのは、必要最小限にすべき

「最小限にすべき」というのはちょっと言い過ぎでしたね。これは後述。
そうあって欲しいし、そうあってくれないとMLなどで困るし、という
一般的意識があるため、そう書いてしまいました。


dezawa> 3 ?"=?iso-2022-jp?B?GyRCNEE7ehsoQg==?= file" をデコードすると
dezawa>      "漢字 file" と間に空白が入る。

rfc2047には削除して良いとは書いてありませんから、そういうことになるで
しょう。ただし、encoded-wordの並びの間のliner-white-spaceに関しては削
除(無視)されると書かれています。これはコンコードされた文字列に長さ制限
を設けているため、長いエンコードの分割を許すために必要だからだというこ
とです。

section 6.2 
>6.2. Display of 'encoded-word's
...snip...
>   When displaying a particular header field that contains multiple
>   'encoded-word's, any 'linear-white-space' that separates a pair of
>   adjacent 'encoded-word's is ignored.  (This is to allow the use of
>   multiple 'encoded-word's to represent long strings of unencoded text,
>   without having to separate 'encoded-word's where spaces occur in the
>   unencoded text.)


dezawa> じつは、1は英語を読み違えてた様で、rfcを読み直す前の方が合っていた。
dezawa>   読む直前に、mew でどうなるかみたら、ずらーーっと長ーくエンコード
dezawa>   してたので、あれ?って思ってたんです。で、英語読む時に間違えた、、

ちなみにMewでは 76 char width をまじめに考慮してエンコードしているわけ
ではなく、オーバーしたらば元テキストを半分ずつにしてエンコード、を繰り
返して実現してます。

先のメールで挙げたFLIMは、結構まじめに、76を超えない最大となるように
がんばってます。


dezawa> 2 はどちらが正しいのでしょう。後藤さん「最小限にすべき」というのは
dezawa> どのあたりからそのようになったのでしょうか。

人間的にも「極力可読であってほしい」という一般的思いもあるため「すべき」
などと書きましたが、rfc2047でははっきり書いてあったかなぁ。このあたりかな?
ニュアンスがよく理解できないので違うかも。

section 5 の最後の、"Use of ..., but discouraged."

>5. Use of encoded-words in message headers
...snip...
>   Use of these methods to encode non-textual data (e.g., pictures or
>   sounds) is not defined by this memo.  Use of 'encoded-word's to
>   represent strings of purely ASCII characters is allowed, but
>   discouraged.  In rare cases it may be necessary to encode ordinary
>   text that looks like an 'encoded-word'.

(「その他の注意」の一部になるかな。。。)
訳: これらの非テキストデータ(例えば絵や音)のエンコード方法は
     本書では定義されません。 ピュアなASCII文字列を表すのにencoded-word
     を試用することは許されていますが、考え直してください。極まれに
     encoded-wordのよう(に解釈され得てしまう)な通常のテキストを
     エンコードする必要があるかもしれません。



dezawa> 3 ですが、(2とも絡むのですが、)これは正しいのでしょうか。

dezawa>    (=?ISO-8859-1?Q?a?= b)                      (a b)

dezawa>            Within a 'comment', white space MUST appear between an
dezawa>            'encoded-word' and surrounding text.  [Section 5,

dezawa> という記述があります。一見では "漢字 file"を支持するのですが、
dezawa> "Within a 'comment'" という断りが気になります。
dezawa> commentではない、すなわち( ) で囲まれない場合はどうなの?って
dezawa> 探してるんですが、未だ見付からず。

上記は確かに "Within a 'comment'"なので、そのまま全体には適用できない
ですよね。

では、comment以外の場合はどうかというと、明確に空白が保存されるとも書
いていませんが、先に挙げたように、text中でencoded-wordは単なるwordなの
で、当然空白を削除する根拠がありません。なので、空白が入る、と理解して
います。


ということで、どーでしょーか

--- Regards,
 Shun-ichi Goto  <gotoh / taiyo.co.jp>
   R&D Group, TAIYO Corp., Tokyo, JAPAN