From: Tomohiro K. <tk...@ri...> - 2001-12-16 23:54:39
|
久保田です。 At 16 Dec 2001 23:52:52 +0900, Araki Ken wrote: > 考えてみると、現状のやりかたもあまりこなれているとはいえませんね。 > > 実装したい個々の機能としては、 > > 1. セレクションで受け取ったデータを、一旦 UCS に変換した後、端末エンコー > ディングに変換して端末に吐き出す。 > 2. セレクションで受け取ったデータを、エスケープシーケンスでいちいち文字 > 集合を指示するISO2022シーケンスに変換して端末に吐き出す。 > 3. セレクション要求を出す/受け取る場合に、UTF8 でのセレクションを優先す > る。 > 4. 端末エンコーディングが、Unicode のサブセットかどうかを調べる。 > 5. 端末エンコーディングが、ISO2022 に準拠しているかどうかを調べる。 > > この5つです。 まず、これらのオプションをどう使って何をやりたいのかを考えましょう。 1. Unicode のサブセットであるような端末エンコーディングのとき、 現在の端末エンコーディングに含まれない文字集合に属する文字であって も、UCS で同一視される文字は現在の端末エンコーディングに準拠する 形でセレクションが受け取れるようにしたい。 2. 逆に、UCS で同一視される文字であっても、ISO2022 で別な文字集合に 属する文字は、ISO2022 エスケープシーケンスを使って (現在の端末 エンコーディングから見れば間違いだが) その文字集合の情報を保持した ままセレクションを受け取りたい。 3. できるだけ多種多様なセレクションを正しく受け取れるようにしたい。 やりたいこと、つまりユーザのニーズは、このくらいだと思います。 端末エンコーディング セレクション どうする? ------------------------------------------------------------- UTF8 COMPOUND_TEXT 変換して受け取る UTF8 UTF8_STRING そのまま受け取る UCS-subset,2022 COMPOUND_TEXT 人によって好みが違う->オプショ ン(a) UCS-subset,2022 UTF8_STRING 変換して受け取る UCS-subset,non2022 COMPOUND_TEXT UCS 経由変換 (オプション(b)) UCS-subset,non2022 UTF8_STRING 変換して受け取る others COMPOUND_TEXT そのまま (オプション(c)) others UTF8_STRING 変換して受け取る ここで、 UTF8 UTF8。(GB18030 も?) UCS-subset,2022 UCS のサブセットでかつ ISO2022 準拠。 EUC-JP, ISO-2022-KR, ISO-8859-1, TIS-620 など。 UCS-subset,non2022 UCS のサブセットでかつ ISO2022 に準拠しない。 Big5, Shift_JIS, GBK, KOI8-R など。 others UCS のサブセットでない。(現状ではすべて ISO2022 準拠で stateful)。ISO-2022-JP-2 など。 オプション(a) 1. UCS を経由した変換により、同一視できる文字は極力端末 エンコーディングに準拠する形で受け取れるようにする。 2. 端末エンコーディングでサポートされる文字集合に属する文字は それに変換し、そうでない文字は ISO2022 エスケープシーケンスを 用いた表現で端末に送る。 3. 漢字 (JISX0208, JISX0212, JISX0213, KSX1001, GB2312, Big5 に 属する文字? もっと正確に判断する?) は 2、それ以外は 1 の 方法を用いる。 オプション(b) 1. UCS を経由した変換により、同一視できる文字は極力端末 エンコーディングに準拠する形で受け取れるようにする。 2. 違う文字集合に属する文字は捨てる。 オプション(c) 1. 端末エンコーディングでサポートされる文字集合だけを受け取り、 端末エンコーディングでサポートされない文字は捨てる。 2. 端末エンコーディングでサポートされない文字集合に属する 文字であってもそのまま受け取る。 これくらいがあると思いますが、「捨てる」というオプションは なくてもいいと思います。とすると、オプション (b-2) と (c-1) は 消え、(b) と (c) はそれぞれ選択肢がひとつしかなくなってしまうので オプションでさえなくなり、生き残るのはオプション (a) だけとなります。 で、UTF8_STRING と COMPOUND_TEXT のどちらを要求するかですが、 端末エンコーディング どうする? ------------------------------------------------------------- UTF8 UTF8_STRING UCS-subset,2022 人によって好みが異なる -> オプション(d) UCS-subset,non2022 UTF8_STRING (どうせ必ず UCS 経由変換するのだ から) others COMPOUND_TEXT オプション(d) ですが、 - オプション(a)が「UCS経由変換」のときは、UTF8_STRING に決まってる - オプション(a)が「ISO2022」あるいは「漢字のみISO2022」のときは、 COMPOUND_TEXT に決まってる ということで、独立なオプションではないので消える。 結論として、オプション(a) のみが生き残る。 こんな感じで、いかがでしょうか。 --- 久保田智広 Tomohiro KUBOTA <ku...@de...> http://www.debian.or.jp/~kubota/ "Introduction to I18N" http://www.debian.org/doc/manuals/intro-i18n/ |