East Asian Ambiguous Character Width

某ブログ(http://d.hatena.ne.jp/vmi/20090526/p1)で、戦いの様子が書かれているUnicodeのEast Asian Widthについてのお話です。
端末エミューレータなど一部のアプリケーションでは、等幅フォントの使用を前提として、全角文字は半角文字の2倍表示幅を持つという扱いをします。Unicodeではこれらのアプリケーションが各文字が全角なのか半角なのかを調べるために、East Asian Widthという属性を用意しています。そして、この中にはAmbiguousというとても厄介な分類があるのです。
仕様ではAmbiguous Characterの幅は、文脈依存ということになっていて、東アジアの文脈では全角だが、それ以外のは文脈では半角という扱いになります。例としてはギリシャ文字や×などの記号が含まれます。
しかし文脈という言葉自体も曖昧だと思います。テキスト文書の表示を考えた場合、表示環境の文脈(ロケールなど)もあれば、表示される文書自体にも文脈があるわけです。たとえば欧米人の作った文書を表示するときは、作成側の文脈に合わせたいところですが、テキスト文書にはそんな情報はないので結果的には表示環境にあわせるかユーザーに指定させるしかなくなります。
現実的な問題としては、この仕様を各アプリケーションやライブラリがどう実装すればよいのかが明確ではないので、Ambiguous Characterの幅は問答無用で1としている実装もあったりします。そのようなアプリケーションを日本語環境で使うとαや×の表示が乱れることがあるようです。おそらく計算上は半角なのに表示上は全角になってしまっているのでしょう。
半角のαと全角のαは別の文字になっていればよかったのかも知れませんが、Unicodeの歴史はあまり知りませんけど、あとから気づいたのですかね。。。とりあえずvmiさん、全CJK人のためにがんばってください。