Namazu-devel-ja(旧)


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: UTF-8 index



寺西です。

"Komai @home" wrote:
> 
> Tadamasa Teranishi さんは書きました:
> >変換処理が MS のものと同じなら、ほとんど実用上問題になることは
> >ないはずなんです。(元に戻らない文字もないわけではないが、
> >その文字はほとんど使われていることはないため。)
> これは、えーっと、例えば、どういう文字になるのでしょうか?
> ローマ数字1とか2とか、そういう物の話でしょうか?

例えば CP932 にはローマ数字が2セット入っています。(よく覚えて
いませんが、確か NEC 拡張と IBM 拡張なのかな)ローマ数字以外にも
いろいろ。

たとえばローマ数字の1 は、0x8754 と 0xFA4A があります。

0x8754 を UNICODE に変換して CP932 に戻すと 0x8754 に戻りますが、
0xFA4A を UNICODE に変換して CP932 に戻すと 0x8754 になり、元に
戻りません。
これはローマ数字の1は UNICODE では同じ 0x2160 が割り当てられて
いるためです。

MS の変換規則については以下の内容で確認できます。
http://support.microsoft.com/default.aspx?scid=kb;ja;JP170559

このことは、0x8754 のローマ数字1 を使う場合は何の問題もなく、
可逆変換できることを意味しています。(逆に 0xFA4A のローマ数字1は
コードが変わってしまうということです。)

このままでは 0xFA4A が使えなくて困りそうですが、MS-IME で入力する
場合、通常 0x8754 の方が使われるようですので、そもそも 0xFA4A の
文字を入力することは容易ではなくなっています。
このため、「元に戻らない文字がないわけでもないが、その文字がファイル
名、ディレクトリ名として使われていることはほとんどない」という状況
になっています。
(もちろん絶対にないということはないわけですが。)
=====================================================================
ところで、GNU libiconv, glibc の iconv は、MS の変換とは異なり
0x8754 を UNICODE に変換して CP932 に戻すと 0xFA4A に
0xFA4A を UNICODE に変換して CP932 に戻すと 0xFA4A になる(実際には
この例通りになるかどうかは確かめていません)といった実装上の違いが
あります。
このように 0xFA4A になってしまうのは都合が悪いので、MS と同じ変換
である必要があります。

当初 GNU libiconv は既に対応済みと誤解していましたが、実際には
glibc の iconv が対応済みのようで、新しい glibc の iconv を使う分には
あまり問題にならないということです。(Samba の開発陣が既に解決している
問題だということです。)

また、Perl の変換についてはあまり考えていなかったのですが、おそらく
MS と同じ変換はしないと思いますので、少々厄介かと思っています。
(やや楽観的だったなと反省しています。)
=====================================================================
上記の CP932 に同じ文字が2セット含まれている問題以外にも別の問題が
ないわけではありませんが、可逆変換に関わる部分はこの辺りかと思います。
-- 
=====================================================================
寺西 忠勝(TADAMASA TERANISHI)  yw3t-trns@xxxxxxxxxxxxxxx
http://www.asahi-net.or.jp/~yw3t-trns/index.htm
Key fingerprint =  474E 4D93 8E97 11F6 662D  8A42 17F5 52F4 10E7 D14E