2011年6月10日金曜日

ユニコードの文字幅問題(1)

KTerm の UTF-8 パッチを作成した理由ですが、“ユニコードの文字幅問題”に個人的な解決をはかるためです。“ユニコードの文字幅問題”というのは、それほど正確な呼び方ではないのですが、便宜的にそう呼んでいます。

まあ、その辺もあるので最初に背景の説明など。

ご存知かと思いますが、文字集合および文字コードというのは、それぞれの文字を集めて一覧にしたもので本質的に文字の幅を規定するものではありません。文字幅を持っているのはあくまでも「フォント」になります。

日本語の端末装置や端末エミューレータでは、漢字などの2バイト文字集合の縦横の長さがほぼ等しい正方形の「全角フォント」で、ASCIIやJIS X 0201のような1バイト文字集合の文字を幅が漢字の半分の「半角フォント」で表示するのがデファクトスタンダードになっていました。

EUC-JP や Shift_JIS のような文字符号化では ASCIIなど1バイトで表現される文字と、JIS X 0208などの2バイトで表現される文字を同時に使用できるようになっていたため各文字に対して、その文字が所属していた文字集合によって文字ごとに幅が決まるためにあたかも文字ごとに文字幅が決まっているかのような状態になっていました。

ユニコードの出現によってこの伝統的な文字幅の扱いが問題になってきています。ユニコードは既存の全部の文字を同じ一つの文字集合として扱うものなので、基本面だけで2バイト、拡張面までいれると3バイト以上の文字集合になります。

さて端末エミュレータで表示する文字幅はどのようにすべきだろうか?

0 件のコメント:

コメントを投稿