[Mew-dist 05917] Re: header encoding question

Shun-ichi GOTO gotoh at example.com
1998年 8月 13日 (木) 18:56:31 JST


後藤@太陽計測です

>>>>> From: Kazu Yamamoto (山本和彦) <kazu at example.com>
> > 	3文字以上じゃインチキすぎるか。
> 
> うーん。

かなりHumanな要素/要望なのでどこかに妥協点を設けないといけませんよね。
例えば可読文字数/割合で判断するとか、
非可読文字だけで構成されていれば独立しないとか。
iso-2022-jp-2は使わないとか


> 僕、知ってます。結局ぜんぶオプションで制御できるようにすると、まるくお
> さまるんでしょう? あぁ.

YES, (^^;; 


> 昨日睡魔に襲われながら考えたアルゴリズムは、
> (3) <符号化必要> の部分を符号化
> 	- (仮定) ほとんどの文字コードは ASCII も表現できる
> 
> (案1) <符号化必要> 全体を符号化
> 	- 一番現実的か?
> 
> 	e.g "hageほげ h<a>ge" -> =?iso-2022-jp-2?B?....?=

この(案1)ですが、符号化が必要な単一ブロックの中に、
単一のcharsetではあらわせない複数の文字コードが存在した場合に
破綻するので(案2)は結局必要かと思います。
そのうえで、iso-8859-1とiso-2022-jpのように、包含するiso-2022-jp-2
でエンコードするか否かを選ぶべきでしょう。
#これは選べるようにオプションにするのかな?


> (案2) がんばる
> 
> (3.1) 文字コードごとに分割。
> 	- このレベルでは white-space は単なる ASCII である
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

というのは、「structured-fieldでの空白の特別扱いはすでに終わっている」
という意味?

> 	e.g. "hage" "ほげ" " h" "<a>" "ge"
>
> (3.2) ASCII を前後の "Q" encoding すべき文字コードにくっつける (おそらく MUST)
> 	e.g. "hage" "はげ" " h<a>ge"

ここでの空白の扱いですが、独立させておいたほうがよいと考えます。
どの言語圏でも空白は語の区切りとして機能し得ると仮定すれば
「そこは境界の有力候補だ!」となりますし、空白の前後で
違うcharsetであったばあいは、やはり空白を境として符号化して
欲しいですし(空白自身はどちらに属してもいいですが)。


> (3.3) 残りの ASCII を "B" encoding すべき文字コードにくっつける (オプション?)
> 	- 長い ASCII は残す?
> 
> 	e.g. "hageはげ" " h<a>ge"

気持ちとしては、できれば残したいのですが、
encodeしてもほとんど文句は言われないように思います。


> 問1: (案2) でがんばるとどれくらい嬉しいか? がんばる必要があるか?

先ほども挙げたように(案2)の文字コード分割は必要(MUST)と考えます。
#そこから先を「mewの善意」とします。(^^;

iso-2022-jp & iso-8859-1を iso-2022-jp-2にするか否かはオプション指定
で解決するとすれば、「かんばる」ための残る問題は、ASCIIがB-encなブロック
にしか隣接しない場合に、独立すべきか否かの判断方法が欲しい、
ということかと思います
#可能性としては「3文字以上なら独立」という案が出ています。

#ほかにも問題はありますか?

これって多分にhumanな判断とおもえるので、最初の実装としては
「独立しない」ようにしておくというのでいいのでは?

あるいは、この判断部分は(3.2)と(3.3)のステップの中で、
「このASCII文字列は隣接するのがB-encだけだ。さてどうする?」
というときに使われる判断ですので、
これはオプションで固定的に選ぶか、
独立すべきか否かの判断関数を用意して定義可能にしておくとか。

ex.)
 (defvar mew-rfc2047-ascii-independence nil
   "*Allow ascii string is to be merged into encoded word (RFC2047)
 t for always independent.
 nil for always merged into.
 function is for call judgement function 
 (see mew-rfc2047-judge-ascii-independence)
 ")

 (defun mew-rfc2047-judge-ascii-independence (str)
   "Judge STR is to be independent or not.
 STR is ascii string to be judged.
 Return non nil for independence.
 Return nil if merge into."
   (cond
    ((string-match "^\\W+$") nil)
    ((< 2 (string-width str)) t)
    (t nil)))


> 問2: たとえば koi8-r って、"B" なの "Q" なの?

Russian ですよね。"Q"らしいですけど。

--- Regards,
 Shun-ichi Goto  <gotoh at example.com>
   R&D Group, TAIYO Corp., Tokyo, JAPAN




Mew-dist メーリングリストの案内