Chapter 03

UTF8 登場前後の Windows の Unicode 事情

zetamatta
zetamatta
2021.02.07に更新

「Windows が Shift-JIS で動いている」は酷いジョークですが、実際のところはどうなんでしょうか。NT以降の Windows では、現在の言語設定の文字コード(通称ANSI)と、UTF16で表現される Unicodeの2種類が併用されているようです。そのため、およそほとんどの文字列を扱う Windows の API が次のように2種類用意されています。

  • ANSI系API
    • API名が「A」で終わっている
    • 文字列が MBCS (Multi Byte Charactor System)。1文字が複数バイト
    • メインの言語(英語+もう一種類の言語)をコードページという番号で指定して切り替える
  • Unicode系API
    • API名が「W」で終わっている
    • 文字列が W (Wide Character):UTF16 で表現する
    • 全ての言語の文字をモード切替なく表現できる
    • 昔は1文字がかならず2バイト固定だったが、今は4バイト以上の時もある

これを見る限りでは Unicode を Windows で扱うには Unicode系APIを使うのが王道に見えますし、実際、Microsoft も当初はそれしか考えていなかったようです。しかしながら UTF16 は思った以上に扱いづらかったため、UTF16 自体はプログラムの内部コードとしては使われても、ファイルやデータ交換用のコードとしてはほとんど使われませんでした。

その後、かのロブ・パイク先生らが Plan9 のために UTF8 を発明すると、その使い勝手の良さが評価され、あっという間に EUC-JP を駆逐しました(もしかして、大して日本語テキストの資産なかったんでしょうか)。そして、Windows でも UTF8 を使おうという機運が高くなってきたわけです。