Windows NTではそれまで存在した当時16ビットのWindowsと異なり、内部処理にUnicodeを採用しました。Unicodeの利点は主に2つあったと思います。
- 1文字が固定長:従来のマルチバイト文字列では1文字が1バイトだったり2バイトだったりするが、それでは文字列処理が面倒。
- 国際化が容易:内部処理を統一することにより、各地域・言語への移植に必要な手間が減る。
当初Unicodeは16ビットでしたが、それでは全く足りませんでした。結局後にそれ以上拡張されています
Windows 2000の頃から採用されているのは(Unicodeの符号化形式の1つである)UTF-16です。これは16ビット単位を基本としていますが、可変長の文字コードです。従来の16ビットだったUnicodeのコードと互換を取りつつ、一部の文字をサロゲートペアと呼ばれる仕組みにより16ビット単位2つで1文字を表すことになっています。
可変長になったということはつまり上に挙げた内の1つ、固定長は駄目になってしまいました。(勿論Windowsが採用していないだけで、以前書いたようにUnicodeとUCSにはそれぞれ、UTF-32やUCS-4という32ビット固定長の符号化形式が存在します)
スポンサード リンク |
どうでも良いことですが、”UTF-32 Windows” でググッたら2位でした。クロールはやっ
そこまで上位に来るほどそれだけの価値があることを書いた、……のではなく単にその組み合わせががマイナーだったというだけです。実際問題WindowsではOSに合わせてUTF-16を使うのが主流でしょうし、外部とのやり取りにはUTF-16やUTF-8の方が確実にバイト数が少なくて済みますし。
それよりも個人的にはUCSCHAR型について扱ったページがこれまでなかったのが驚きでした。