Unicode正規化 その2
複数の文字をくっつけて1文字を表現する「結合文字列」ですが、これを本当に「ちゃんと1文字として表示する」のは、実はかなり難しいことのようです。
結合文字列を1文字に表示するには
まずなにより、OS自体にその能力が必要です。史上はじめてこれを実現したのがMac OS Xです。WindowsではVistaになってやっとその能力を持つようになりました。
次に、文字を表示するソフトウェアにもその能力が必要です。そしてさらに、フォントもその技術に対応していなければなりません。
つまり「OS」「ソフトウェア」「フォント」の3つが、揃って対応している時にだけ、結合文字列を1文字に表示することができるわけです。
フォントの場合、同一メーカーでもファミリーによって対応がまちまちだったりします。例えば、フォントワークスの筑紫ファミリーは(大好きな書体ですが)OpenTypeでも結合文字の字形そのものがないようです。
でも、フォントは別の書体に変更できるので良いのですが、ソフトウェアはそう簡単に変更するわけにはいきません。とくにOS X環境でのDTPは、今や実質的に「Adobe DTP」になっていて、Adobe CSにどっぷり依存している状況です。そして、そのAdobe CSが「結合文字列を1文字に表示できない」こと、さらにそのために実装された対策が危険な代物であることは、事故を未然に防ぐために広く周知されるべきでしょう。
さて、結合文字列が困った結果を引き起こすのは、1文字に表示できないAdobe CSだけの話ではありません。実際には、1文字に表示できるソフトウェアでも困った結果になることがあります。
結合文字列が引き起こす様々な問題
これはSafariでGoogle検索をした結果です。なんと「パンダ」の検索結果が475件しかありません。実はこの「パンダ」の文字、フォルダ名をコピペしたものです。「パ」と「ダ」が結合文字列なので、検出されるのは実際に結合文字列を含んだ「パンダ」か「ハンタ」だけというわけです。OS Xユーザで、このようにアイテム名をコピペしてGoogle検索をしたら、検索結果があまりに少なくて当惑した方も多いのではないでしょうか。また、誰もが魅了される素晴らしいパンダのサイトでも、結合文字列を含む「パンダ」を使っていたら、アクセスが増えることは期待できません。
次は、JeditXで結合文字列が混在したテキストをソートしてみました。左がソート前、右がソート後です。同じ字形なのでソートしても並び順が変わらないことを期待するのですが、データが異なるため期待に違う結果になってしまいます。
文字検索に関しても、同じ字形なら同じようにヒットすることを、どのソフトウェアでもサポートしているわけではありません。
これはCotEditorで「u」を「A」に一括置換してみたものです。「0075」が検索対象となって置換されてることが分かります。(CotEditorはとてもよくできたエディタです。この置換結果も決して悪い仕様ではないので、低く評価しないようにしてください)
このように、思いがけない結果になるのが、結合文字列です。とくに1文字に表示できるソフトでは、その文字が結合文字列であることを判別できないので厄介です。それでは、どうしたらこれらを防ぐことができるのでしょうか。
やはりそれには、結合文字列を「単一コードの1文字」に変換するしか方法はないと思います。上の例で言うと、結合文字列「ハ+半濁音」を1文字の「パ」に変換するということです。
補注:
Adobe CS が結合文字列を1文字に表示できないことを見ておきます。
InDesignで試してみましょう。CS1でも確かめられるように「簡単なソフト」を少し改良しました。
簡単なソフト v0.2.1 をダウンロード
「InDesgn」にチェックを入れると、InDesignで置換に使えるコードポイントが表示されます。前回と同様に「NFD」ボタンで「ポ」を変換し、「<30DB><309A>」を表示させます。
それを[置換文字列]へコピペします。こうすると、InDesign CS1でも結合文字列の「ポ」をそのまま表示させることができるのです。適当な文字を検索して、置換してみましょう。
(CS2では、フォルダ名などの結合文字列をテキストフレームへコピペするだけでOKです)
これが、InDesignで表示された結合文字列です。1文字ではなく、2文字に別れていますね。(これはCS1の表示ですが、CS2では半濁音が基底文字「ホ」へ中途半端に食い込んでいると思います)
左上図はヒラギノフォントです。[option+command]キーを押しながら、小塚フォントに変更してみましょう。なんと、結合文字の表示さえできません。
Adobe CSでは、InDesignだけではなく、Illustratorも同様に1文字に表示できません(他のソフトでは試していませんが、同様にまったくできないと思います)。さて、これをどう考えるべきでしょうか? Adobeともあろう企業が、できの悪いソフトウェアを作ってしまったのでしょうか?
むしろ私は、Adobeをもってしても、現段階ではアートワークへ結合文字列を1文字に表示させることができない、そう考えるのが正当だと思います。それほどこの技術は難しいのでしょう。とくに結合文字列の規格はタテ組のことを微塵も考慮していませんから、なおさらです。(CS3ではどうでしょうか? 私はまだ無理だと思いますが、もしかするとやってくれるかもしれませんね)