2011年6月14日火曜日

ユニコードの文字幅問題(3) ポンド記号

Unicode の文字幅が規定されましたが文字幅の互換性問題は解決しませんでした。

ユニコード対応の端末エミュレータでCJK互換文字幅を指定してやることにより、ほとんどの文字は適切な文字幅になるのですが、問題が残ります。きちんと確認していませんが MS-Windows で CP932 から移行する場合には大丈夫のようです。しかし私の使用している Linux ではうまくいきません。

この直接の原因は JIS の文字コードと、Unicode の文字の変換表が複数あることによります。CP932 の変換表では積極的に互換文字を使用するのに対して、Linux等で使用している変換表では「互換文字はできるだけ使用しない」というユニコードの規定に従って、ASCII や JIS X 0201 と重複している文字のみ互換文字を使用する方針になっています。ところが、全角幅指定されているのは互換文字だけで基本文字の方は Narrow 固定になっています。

例を上げると JIS X 0208 の01区82点にある(ポンド記号)は Microsoft の変換表では U+FFE1 FULLWIDTH POUND SIGN にマッピングされるのに対して、Linux では U+00A3 POUND SIGN にマッピングされているのですが、U+00A3 は Narrow(半角)扱いになります。同様の問題を持つ文字に「(セント記号)」や「(マイナス)」があります。

このように「互換文字」に「相互変換を維持する目的でのみ使用し、できる限り使用しない文字」と「全角など特定の文字幅属性を持った特殊文字」の2種類の矛盾した属性を持たせているというユニコード自身の本質的な問題に起因しているようです。

この問題を私は「ポンド記号」文字幅問題と呼んでいます。

0 件のコメント:

コメントを投稿