サロゲートペア
きのうのつづきー。
Windowsは内部処理として、Unicodeを採用している。実際に使っているのはUnicodeの中でもUTF-16。UTF-16はUTF-8と違って、一文字あたりのバイト長が固定なのがメリットなのだが(多分)、そのかわり2バイトですべて表現しなければならないので、65536文字しか扱えない。UnicodeといえばUTF-8もUTF-16もUnicodeなのだけれども、どちらかといえば、UTF-16の方が優勢のようだ。(規格の詳しい違いはwikiに詳しい)
というわけで、WindowsではUTF-16を使っているのだが、実は日本語の中にはこの65536文字の中に入りきらない文字があるのだ。それが今回話題にしているJIS X 0213の第三水準第四水準の漢字なのである。
ちなみに、Unicodeというのは符号化の方法であって、文字集合を規定しているJISコードとは直接関係はない。文字符号化と文字集合の何が違うかというと、そりゃまあ全然違うわけだ。(笑) たとえば「一二三」「123」「壱弐参」というのはそれぞれ数字を表す文字集合である。文字集合というのは集合のことなのでどっかで区切りを入れるわけだが、たとえば世の中には「一二三」しか集合に入れていない文字集合というのも存在する。何かといえば、それは小学一年生の教科書。「123」はあるかもしれないが、「壱弐参」は確実にこの文字集合には含まれない。というわけで、文字集合というのは区切り方次第でいくらでも作れるわけだが、コンピュータの世界ではJISの第一・第二・第三・第四水準という集合がつかわれるわけだ。たとえば、「一」「壱」という文字は第一水準の集合に含まれているが、ローマ数字の「I」は第三水準に含まれる(たぶん)。これまでのコンピュータは第一・第二のみを集合として認めていたJIS X 0208を使用していたので、「一」「壱」はコンピュータで表現できるが「I」は表現できなかった。(表現できてるじゃないかと思われるかもしれないが、実はこれはアルファベットのアイだったりする。あとWindows等ではローマ数字の「I」が表示できたりするがこれは機種依存文字というやつなので、JIS X 0208しかサポートしていないシステムが存在する場合(インターネットなんかがそうだ)では使用してはいけない)
文字の符号化というのは、文字集合とは何の関係もなくて、たとえば「一」という文字をどうやってコンピュータに認識させるかというその方法のことである。「11000001101100」と表現するか「100111000000000」と表現するかはその符号化のお約束に従って変わってくる(ちなみに前者がいわゆるJISコード、後者がUnicode(UTF-16))。符号化の方法としては、いわゆるJISコード、シフトJISコード、日本語EUC、Unicodeなどがある。
で。符号化するためにはそのなんらかの母集団を決めなければならないわけだが、そこで出てくるのがJIS X 0208(すなわち第一・第二水準)である。JIS X 0208をどうやって符号化するかはシステム次第なので、WindowsはUnicodeを使っているわけだ(ちなみに、Win9xはシフトJISを使っていた)。ややこしいのはシステムであるWindowsがUnicodeを使っているからといって、その上で動くアプリケーションやデータがUnicodeである必要はまったくないということだ。あくまでも符号化の方法にすぎないわけだから、素になる文字集合が表示できればUnicodeだろうがシフトJISだろうがなんでもいいわけである。
第一第二水準というのは併せて6000字ぐらいなので、どの符号化方法をつかっても表現できたし、むしろ余りもあった。(その余り空間に各メーカが勝手に(悪い意味ではない)ぼんぼん文字を追加していったので、シフトJISは各社で互換性のない混沌としたものになったりしたのだな)
しかし、JIS X 0213:2000というのが2000年に設定された(2004年に改訂)。ここに文字集合として新たに第三第四水準の文字が追加されたわけだ。もちろん、これは文字集合の話なのでどうやって符号化するかはシステム次第である。JIS(日本工業規格)できまったからといって、符号化方法にいわゆるJISコードを使う必要などないのだ。シフトJISだろうがUnicodeだろうが何でもありである。まぁ、世界的な趨勢を考えていまさらいわゆるJISコードとかを採用するシステムが出てくるとは思えないので、結局はUnicodeということになるのだろう。
あー。あと、JIS X 0212(補助漢字)ってーのもあるけど、よくわからないのでパス。
んでだ。ここからが本題(長い前置きだ)。Unicode(UTF-16)では、65536文字しか扱えないという話は前にしたが、ここに第三第四水準の漢字を足そうとすると数がたりなくなるんである。(どうもこの第三第四水準の漢字をUnicodeに採用されるようになるまでの話もなかなかドラマティックらしいのだが、それもパス)
UTF-16が65536文字しか扱えないというのは実は嘘で、それ以上の文字を扱う方法があって、それのことをサロゲートペアと呼ぶのだ。UTF-16は標準では2バイトで文字を表現するのだが、サロゲートペアを使うことによって20ビット(+固定長12ビット=4バイト)で文字を表現することができる。これによって65536文字の壁を突破することができるので、JIS X 0213のすべての文字を含むことができるのであった。しかし、すべての文字が規定されたからといって、それがすべて使えるかというとまた別の話。そうやって流れてくる文字のデータ列を解釈できないとアプリケーション上では文字として扱えない。
そこでVistaということになる。OSはもちろん対応しているし、アプリケーションも対応しているものがある(メモ帳とIEが対応しているのは確認した)。ちなみに、firefoxはとっくに対応しているがそれは別の話。表示ができても入力できなければお話にならないのだが、VistaについてるMS-IMEではもちろん入力できる。ちなみに、ATOKは2005でとっくに対応しているがそれも別の話。とはいえ、第三第四水準の漢字となると読み方が不明だったりして、入力しようと思ってもなかなか方法がわからないのも確か。IMEPadから入力しようとしても、目当ての漢字を探し出すのはかなり骨だ。手書き入力だとどうも第三第四水準の漢字は候補に挙がらないみたいだし。使ったことないけど、ATOK2005以降だともっと簡単に入力できる気がする。
どの漢字が第三第四水準の漢字なのか(そしてどの文字がサロゲートペアに対応しているのか)調べるのはかなり骨だと思うけど、簡単にわかるのは「ひじかたとしぞう」の「ひじ」。「土」に「丶」という文字は2種類あって、土の右横に点があるパターンと右上に点があるパターンの2文字があるのだが、右横に点があるのが第三第四水準で(どっちかはしらん)サロゲートペアを使用していないパターン、右上に点が第三第四水準でサロゲートペアを使用している漢字。どちらもMS-IMEだと「つち」で変換できるので、メモ帳とかに入力して、バイナリエディタで確認してみるのも面白いかもしれない。ちなみに、ウチの環境だとwin2000+ATOK15なので、右に点は入力できるけど、右上に点は入力できない。ATOK15はサロゲートペアに対応してないので入力できないのも当然ではある。右に点もMSゴシックなんかだと対応しているフォントがないので表示できない。表示するためには対応しているフォントが必須である。
・・・とゆー説明はさておいて、結局何が言いたいかというと、Win2000でサロゲートペアになってる文字を入力できないもんかなぁ、ということなのだ。入力できて何が嬉しいと言うこともないが、どうせならいろんな漢字が表示できる方が嬉しいじゃないか。OSが対応してないから無理なような気もするのだけど、いろいろ検索するとシステムを変更すれば表示できるらしいのだ(当然対応フォントはインストールしてあるものとして)。どう変更すればよいのかそのページに書いてないのが悔しいのだが・・・。でもきっと、表示はできても入力はできないだろうな。ウチのATOK15じゃ入力できないし、MS-IME000では第三第四水準の漢字すら入力できない。かといって、それを確かめるためだけにATOK新しくするのもなぁ・・・という気もするし。とりあえず、firefoxでサロゲートペアの字を表示できたら満足するのだけど、だれかやりかた知りませんか。(笑)
| 固定リンク | 0
この記事へのコメントは終了しました。
コメント