umq (4421) の日記

○ ◎ ●

NLS って難しい(D)

umq による 2004年08月30日 3時03分 の日記 (#246660)

前回 NLS ファイルを解きほぐしたが,これで,NLS ファイルから MBCS と Unicode のコードポイントマッピングが詳らかになる。

WINE プロジェクトに libwine_unicode というライブラリがあるのだが,そこにコードページの定義ファイルが存在する。

その libwine_unicode から CP20932 の定義ファイルを取出して,Windows の NLS ファイル解析結果と比較してみることにする。
というのも,WINE プロジェクトでは CP20932 は EUC-JP であるという説を支持しているらしく,
/* generated from ftp.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/JIS/JIS0208.TXT */
なんて記述が見られるためで,これにより,EUC-JP との違いも明らかになろうという目論みもあるからだ。

さて,方法としては,それぞれのファイルから,codepage→unicode, unicode→codepage のマッピングを1行につき1ポイントとなるように展開し,diff(1) で比較するという方法をとった。

ファイルの見方としては,side-by-side diff と同じであるが,既定文字にマップされているものは,わかりやすいように,挿入として表示されるようにしているところに留意願いたい。

比較に際して,特記しておくこととして,Windows の C_20392.NLS ファイルと WINE の c_20932.c では,マップできなかった場合の既定文字の相違をあげておく。
具体的には,WINE の c_20932.c では U+003f を使っているのに対して,C_20932.NLS では U+30fb にマップしているところもあるということである。
既定文字については、NLS ファイルの先頭から 11~18bytes あたりに割当てられているが、それぞれ、どう用いられているかはわからない。

さて,結果であるが,かなり大きな相違が見られた。(リンク先のファイルは予告なく消す場合があります)
unicode → codepage の結果(273,320bytes): 9772 ポイントで相違が見られる。
codepage → unicode の結果(469,006bytes): 14477 ポイントで相違が見られる。
Windows の C_20932.NLS の方が,6,500文字ほど多くマップされているようなので,JIS X 0212(補助漢字)の分ぐらい多いとすると,説明のつきそうな数である。

[ひとつまえ]

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

コンピュータは旧約聖書の神に似ている、規則は多く、慈悲は無い -- Joseph Campbell

処理中...