[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 メーリングリストの案内