Unicode正規化 その2 (2010.3.22 改訂)

複数の文字をくっつけて1文字と見なす「結合文字列」ですが、これをしっかりと1文字に表示するのは、実はかなり難しいようです。

そして高度な技術で1文字に表示できても様々な問題を引き起こします。

“結合文字列” を1文字に表示するには

まずなにより OS 自体にその機能が必要です。はじめてこれを実装したのが Mac OS X です。Windows も Vista でその機能を持つようになりました。

文字を表示するソフトウェアにもその機能が必要です。さらにフォントもその技術に対応していなければなりません。

つまり「OS」「ソフトウェア」「フォント」の3つが、揃って対応している時にだけ結合文字列を1文字に表示することができるわけです。

“結合文字列” が引き起こす様々な問題

以前ここには「結合文字列が引き起こす問題」について書いてありました。しかし年月が経過してこの問題が回避されるようになってきたので、これを問題視することはあまり現実的ではなくなりました。

しかしそれで問題がなくなったわけではありません。結合文字列の問題を回避するために「NFCに正規化する」という方法がとられるわけですが、これがまた厄介な問題を引き起こすのです。

「その3」以降ではこの「厄介な問題」を指摘し、さらに解決策を提案してみたいと思います。

補注
“結合文字列” が実際に1文字に表示されている様子を仔細に見てみると、面白いことが分かります。

これはモリサワの新ゴUで「ポ」を表示したものです。この書体は半濁音が横棒に食い込んでいます。

左は「1つの文字データ」、右は「結合文字列」です。左右とも字形がまったく同じです。半濁音もちゃんと食い込んでいます。見事に同じです。

種明かしをすると、実は結合文字列の方に実際に表示されているのは「1つの文字データのポ」なのです。両方とも完璧に同じなのは当然なんですね。

字形デザインの微妙な違いも反映させて結合文字列を完璧に1文字に表示するには、たしかにこの方法しかなさそうです。「OS」「ソフトウェア」「フォント」の3つが揃ってこの方法に対応していないとできないのも頷けますね。