18:11現在のUnicodeは、256×256文字を一つの「面」として17の面に文字を定義する。65536×17の文字が使える(実際には未定義領域などもありこれより少ない)。Plane)はUnicode制定当初から使えた領域で、基本の1文字2バイトで扱う。それ以外の16個の面(非BMP)は当初のUnicodeには規定されていなかったもので、サロゲートペアという1文字4バイトの複雑な扱いになっている。そんなサロゲートペアだが、WindowsではXPになって初めて使えるようになった。これに対応していないWindows2000では、例えば「」や「」などの文字は正常に表示されず、2文字分の黒点として表示されてしまう。...と思っていたのだが、MicroSoftの資料を見ると2000でもサロゲートペアが使えるという。2000にも機能自体は存在して、標準では無効化されているということのようだ。これを有効化するにはレジストリを書きかえるだけでいい。以下が書き換える場所である。メモ帳にコピペして.regの拡張子で保存してダブルクリックすれば書き換わる。NT\CurrentVersion\LanguagePack]"SURROGATE"=dword:00000002これを書き換えるとどうなるか。試しに以下の文字列をメモ帳に書き込んでみる。これらは全て非BMPの文字である。サロゲート機能がオフの状態。このように1文字につき2つの黒点が表示される。1文字=2バイトと判断しているために4バイトは2文字と認識されてしまうのだろう。サロゲート機能をオンにするとこのとおり正常に表示される。このレジストリキーはXPにもあるので、これを値ごと削除すればXPでサロゲートペアが扱えなくなるはずである。暇があったら試してみたい。