基本Unicodeか拡張Unicodeか、それが問題だ2007年08月14日 17:01

今はちょっと落ち着いたようですが、Windows VistaといわゆるJIS2004の対応で、いろいろと困った人もあったかも知れません。でも、困った事態になるのは、よく考えるとちょっと変な気がします。なぜなら、Windows はUnicodeに対応しているから世界中の文字を扱えるんだということになっていたはずなのに、JISで追加された文字を扱うのに何だって新たな対応が必要なのでしょうか? それを説明するためには「基本Unicode」と「拡張Unicode」という区分を導入し、これらを別の文字コードとして扱う必要があるように思います。

「基本Unicode」とは、当初計画された16ビットの範囲内のUnicodeです。Unicodeの基本多言語面(BMP)といってもいいですね。基本Unicodeの範囲内のUTF-8を「基本UTF-8」と称します。つまり最大3バイトの長さになります。同様に、「基本UTF-16」もあります。これはUCS-2と同等です。

一方「拡張Unicode」とは、plane 16までを扱えるようにしたUnicodeです。ここまで対応したUTF-8を「拡張UTF-8」と称します。4バイトまであります。同様に、「拡張UTF-16」はサロゲートペアに対応したUTF-16です。

こういう区別を導入すれば、事態はもっとすっきりします。今までは基本Unicodeに対応していたプログラムを、拡張Unicodeに対応させる必要が生じたので、Vista対応で新たな処置が必要になったわけです。

ここで重要なのは、基本Unicodeと拡張Unicodeは別々の文字コードであるという認識です。そこをごっちゃにするから問題が生じるのです。少なくとも、Shift_JISとShift_JIS-2004とを区別して考えるのであれば、基本UTF-8と拡張UTF-8も区別しないとおかしいのではないでしょうか。