読者です 読者をやめる 読者になる 読者になる

UnicodeとUTFの違い

この2つは多分違うものなんだろうと思いつつ、今まで曖昧なままこれらの用語を使っていたので調べてみた。

Unicode

Unicodeは世界で使われる全ての文字を統一的にまとめた文字集合のことを指す。Unicodeという文字コードがあるわけではない。

UTF

計算機でUnicodeをどのようなバイト列として扱うかを規定したもので、所謂文字コードの1種である。UTFという名前の付いた文字コードはいくつもある。

以下は1バイト=8ビットで話を進める。

1-6バイト可変長の8ビット単位でUnicodeを表現する文字コード。ASCIIに含まれる文字は1バイト、それ以外の文字は2-6バイトで表現するため、ASCIIの上位互換に当たる。8ビット単位で符号化するためバイトオーダーは関係ない。

2バイト固定長の16ビット単位でUnicodeを表現する文字コード。実はUnicodeは16ビットでは全てを表現することが出来ないため、2つ合わせて4バイトで1文字を表す場合もある。16ビット単位で符号化するため、バイトオーダーを考慮する必要あり。

4バイト固定長の32ビット単位でUnicodeを表現する文字コード。もちろんバイトオーダーを考慮する必要あり。

  • その他

上記の他にも、UTF-5、UTF-7、UTF-9、UTF-18などがある。

補足

  • バイトオーダー

CPUはデータをメモリにどのように格納するかで2種類に分けることが出来る。それらはリトルエンディアンとビッグエンディアンと呼ばれる。リトルエンディアンはデータの上位から順番にメモリに格納する、ビッグエンディアンは逆。UTF-8はそもそも8ビット(=1バイト)単位であるため、バイトオーダーに依存しないという訳である。

まとめ

やたらUTF-8を持ち上げる形になってしまった。

参考サイト