BlankTar

about | blog | works | photo

unicodeというのはみなさんもよくご存知のところだと思いますが、UCS-2とか言うのはなんなのか。
解説書にはunicodeにはUCS-2やUCS-4などの方式があるなんて書いてあるのだけれど、いやそれはUTF-8とかUTF-16の事じゃないのか。
調べてみたので、メモをば。

そもそもunicodeとは何だ。

世界中の言語を一個の文字コードで表せたら最強じゃね?www って言って作られたのがunicode。
マイクロソフト、アップル、IBM、etc... が作ってるらしい。
とりあえず16ビット用意すれば間に合うよね、ってことで始まったので、基本は16ビット、2バイト。
とはいえ足りなくなってきちゃって、しょうがないからUnicode 2.0以降は21ビットになったらしい。

文字に対して番号が振ってあって、それを16進数で U+FFFF みたいに表す。
文字の定義とともに番号を振ってるので、文字セットという言い方も出来るし、文字コードという言い方もできる、かも。

で、UCSとは。

unicodeやるぜーっつって作られたのがUCS-2。
2と付くとおり全ての文字が2バイトずつになっている。
足りなくなっちゃったので、21ビット版のUnicodeを元にしてUCS-4というのに拡張されている。

2バイトずつだとASCII文字とすら互換性がないし、かなり使いづらいらしい。(実はUTF-16, UTF-32もASCIIとして読むことは出来ない)
というわけで、かどうかは知らないけれど、見かけないよね。

皆大好きUTF。

UnicodeもUCSもいまいち使いづらいので、もっとマシな表し方を考えよう、って出来たのがUTF。多分。
表し方が違うだけなので、表現できる文字は変わらないみたい。
ご存知可変長のUTF-8、16ビットを一つの単位として扱うUTF-16(UCS-2と互換性あり)、32ビット固定長のUTF-32(UCS-4と互換性あり)。

そう、UTF-8は8ビットじゃないのです。8bitクリーンと言う事らしい。
実際の一文字の長さは1-4バイト、8-32ビット。
ASCII文字の完全な上位互換で、しかも文字の先頭と文字の長さが一目でわかるという親切さ。

UTF-16は固定長・・・かと思いきや、UCS-2の範囲外は32ビットで表すらしい。
UCS-2との互換性があるがゆえに、ASCIIとの互換性はない。
更にサロゲートペアとかいうのでごにょごにょして扱える文字数を増やしている。分かりづらい。

UTF-32は固定長。Unicodeのなかでは一番シンプルみたい。
ただし一文字につき4バイト消費するので、単純にshift-jisで書かれた日本語の文章ならサイズが倍くらいにになってしまう。

参考:
UCS-2とUTF-8 - 化合物命名法談義
Unicode - Wikipedia
< pythonのデコレータを使ってお手軽ベンチマーク サイト内検索を自作してみた。 >