🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: fj.net.mime
Article #162

Re: encoded-word

#162
From: Kazushi Jam Marukawa
Date: Sun, 12 Jul 1998 00:00
119 lines
6635 bytes
最初だけ話を戻すと、ルール(2)の"("に関する言及について。

   In <rsq4swo1su0.fsf@is27e1s03.jaist.ac.jp>, Tanaka Akira wrote:
   > In article <96g7o6.kv5.ln@sou.nerv.org>,
   >   Kazushi Jam Marukawa <jam@pobox.com> writes:
   >> あるんですが、'comment'中の"("と")"と"は、"Q"エンコードしちゃ
   >> いけないんだそうです。5.のルール2参照。

   > ってことに関する解釈の相違, ってやつですね。
   > 私はこれをエンコードされた US-ASCII の文字列内に "(", ")", "\" が含ま
   > れないと解釈しました。

もう一遍眺めた所、田中さんの解釈以外不可能ですね。ありー?
なんか、解釈の相違っていうか、僕の誤解です。"Q"-encoded
'encode-word'って具合に、明確に、エンコード後の文字の話だと
書いてあるのに、なんか勘違いしてました。失礼しました。


では、話を続けます。

   Tanaka Akira <akr@jaist.ac.jp> wrote:
   > う。うまく伝わらなかったような気がする。

   > 私は構造を持ったデータ(構文木)を RFC822 の文法に従った US-ASCII の文字
   > 列(メッセージのネットワーク表現)に変換することを考えています。

了解してると思ってます。

田中さんは、既に構造があるから、それ以外の部分の"("をどう
エンコードするかってな話をしたいというスタンスなんだと、
そう理解してます。「後で判断する」ってな具合に書いたのは、
そういう構造については構造エディタとか、なにかに他に任せ
てると、そういった意味合いでした。

で、構造以外の部分の"("をどうエンコードするかについては、
上述の通り僕の勘違いでした。同意します。

で、一方僕は、構造自体をテキストに埋め込むにはどういうのが
楽かという話をしたがってると、そんな感じです。以下、そんな
話を続けてみます。

   >> ちょっと分かり難いので、例でも。例えば、(ab\(cd)となって
   >> 欲しいcommentを作りたいとします。どうやってデータを
   >> エンコーダに渡し、どんな物が出てくると便利でしょう。

   > 1. 構文エディタを使う。
   > 2. Emacs で (ab(cd) と入力して真中の "(" には適当に quoted-pair で
   >   encode されるべきであるというプロパティを張り付けておく。
   > 3. "(ab" と "cd)" は ASCII で記述し "(" は JIS X 0201 で記述する(笑)

最初に注意を。以下では、実際の文字列を"で囲って書きます。
"\("は"\"と"("というわけです。一方"で囲まず(や\(と書いた
場合は、構造に関係ある"("と関係ない"("を意味します。実際
にどういう文字列になるかは、実装次第だというわけです。

田中さんの方法だと、(ab\(cd)の構造を作った上でエンコード
する必要がありますよね。"("と"ab(cd"と")"に分け、内部の
"ab(cd"をエンコードするということを再帰で繰り返すコード
になると思います。

一方で、この真中の"("を、何時も"\("というquoted-pairで
保持するようユーザに強制しちゃえばどうでしょう。要は
印をつけているわけですが。

(ab\(cd)を"(ab\(cd)"として保持し、エンコード時には、
単にASCIIの"("と")"と"\"に触らないようコードを書く
というわけです。楽チンじゃないかと。

これで、あとencode方法が透過的(とにかくユーザが指定した
charset名を付けて"b"エンコードして好きな所で改行できる)
なら、エンコーダ実装はかなり楽だろうと思うのですが、、、
いかんせん改行の所の制限が大変過ぎますね。


逆にデコードの時も、(ab\(cd)を(=?US-ASCII?Q?ab=28cd?=)
なんてエンコードしてあったら、デコードした"ab(cd"から、
"("を見付け出して印を付けとかないといけませんよね。
それってかなり大変じゃないかと。

でも、規約上は、デコードした文字列にASCIIの"("が入って
る可能性があるわけなので、印付け無しにデコードして
エンコードするプログラムは作れないような気がする。
まあ、デコードしてエンコードするためには、全部の
charsetを知らないといけないみたいなので、そもそも
不可能という話もあると思うけど。


   >> ただ、Non-ASCIIの文字を入れれるんだから、ASCIIの"("も
   >> 入れれるっていう論理には無理があると思います。

   > なるほど。では「encoded-word には指定した charset に含まれる文字はすべ
   > て入れられる」とでもいえばいいでしょうか?

   > # たとえば, ISO-2022-JP の encoded-word を考えると, JIS X 0201 の "("
   > # や JIS X 0208 1983 の "(" は encoded-word にいれてもいいでしょうか?

指定したcharsetが"("という文字をASCIIとして扱ってるかどうか
次第じゃないでしょうか。'comment'で特別の意味を持つ文字"("、
")"、"\"ってのは、すべてASCIIです。ですから、"("と等しいか
じゃなくて、ASCIIの"("かどうかで判断されるべきだろうと。

例えば、以下のようなエンコーダを念頭に置いています。

 - 入力がASCIIの"("か")"か"\"か?
    - そうならそのまま出力。繰り返し。
 - 入力がASCIIかISO-*か?
    - ASCIIかISO-*なら"Q"エンコードする。
       - "("か")"か"\"という文字を見付けたら"Q"エンコードを
         終え、最初から。
 - 入力がそれ以外か?
    - それ以外なら"B"エンコードする。違う入力になったら最初から。

で、構造に関係ないASCIIの"("は、必ず"\("として保持すると
決めちゃえば、上述のように色々楽チンだなと。でも、結局は
各charsetにおける一文字単位での切り分けとか出てくるんで、
透過的にはならないし、簡単にもなりそうになくて、あんまり
意味がないような気もしてきましたが。

-- かずし
Technical Details
Message-ID: <s7kbo6.9d3.ln@sou.nerv.org>
Path: arc1-ca.pugleaf.net!unknown!not-for-mail
References: <96g7o6.kv5.ln@sou.nerv.org> <rsq4swo1su0.fsf@is27e1s03.jaist.ac.jp> <th98o6.2hl.ln@sou.nerv.org> <rsqyatzn1jv.fsf@is27e1s03.jaist.ac.jp>

Show Full Headers
Complete Article Headers
X-Google-Language: Japanese,JIS
X-Google-Thread: 100bbf,1a07400fac91910c
X-Google-Attributes: gid100bbf,public
From: Kazushi Jam Marukawa <jam@pobox.com>
Subject: Re: encoded-word
Date: 1998/07/12
Message-ID: <s7kbo6.9d3.ln@sou.nerv.org>
X-Deja-AN: 370845230
Content-Transfer-Encoding: 7bit
Sender: Kazushi (Jam) Marukawa <jam@sou.nerv.org>
References: <96g7o6.kv5.ln@sou.nerv.org> <rsq4swo1su0.fsf@is27e1s03.jaist.ac.jp> <th98o6.2hl.ln@sou.nerv.org> <rsqyatzn1jv.fsf@is27e1s03.jaist.ac.jp>
Content-Type: text/plain; charset=iso-2022-jp
X-Complaints-To: abuse@io.com
X-Trace: hiram.io.com 900281235 18842 131.193.40.109 (12 Jul 1998 22:07:15 GMT)
Organization: none
Mime-Version: 1.0
User-Agent: tin/pre-1.4-980704 (UNIX) (NetBSD/1.3F (i386))
NNTP-Posting-Date: 12 Jul 1998 22:07:15 GMT
Newsgroups: fj.net.mime