Unicodeの概略を理解する
本来、UnicodeのUniは一つを表すことなのに、複数のUnicodeがあるみたいですね。
また、最近のPerlではutf8とか、VB2005では内部コードにUnicodeを採用しているとか…。
ということで、Unicodeがよくわからないので、今回、調べてみました。
Unicodeとは
まず、ユニコード(Unicode)はUCS-2(Universal Character Set coded in 2 octets)と称されています。
基本的に世界の文字を2バイト(16ビット)で表現しようとしている(現在では、21ビットの文字集合として規定されている)。
しかし、コードは一つですが、文字符号化方式により、UTF-16,UTF-8,UTF-7,UTF-32等の約4種類があるのです。
そう、あくまでもUnicodeは一つなのです。複数のUnicodeがあるわけではなく、複数の文字符号化方式があるのです。
UTFとは
文字符号化方式(UTF)とは、UCS-2として定義されたコード文字をビット列としてどのように表現するかの方式です。
つまり、コードは1つだけど、それをコンピュータ内部表現では複数の方式で表現することが可能で、Unicodeは実際そうしてるのです。
UTF-16とは
UTF-16は、コード1文字を常に16ビットで表す文字符号化方式で、通常、文書の始めにBOM(Byte Order Mark)を付けます。
BOMがU+FEFFの時はビックエンディアンで、U+FFFEの時はリトルエンディアンになります。
ビックエンディアンはコードと同じバイト列で、リトルエンディアンはコードの上位バイトと下位バイトが入れ替わったバイト列です。
たとえば、コード0x0041(2バイト)の文字は、ビックエンディアンでは0x0041で、リトルエンディアンでは0x4100のなります。
ビックエンディアンは、TCP/IPネットワークで採用され、リトルエンディアンはWindowsXP(VB2005)で採用されています。
16ビットに割り当てられなかった漢字は、サロゲートペアと言う拡張仕様で、32ビットで表現する。
しかし、このケースにあたる漢字は、JIS第3第4水準の一部とのことです。