UTF-16 【UCS/Unicode Transformation Format 16】 UTF-16BE / UTF-16LE
概要
UTF-16(UCS/Unicode Transformation Format 16)とは、UnicodeおよびISO/IEC 10646で規定された文字符号化方式(文字エンコーディング)の一つで、2バイト(16ビット)の固定長でコードを表現する符号化方式。U+0000からU+FFFFの基本多言語面(BMP)収録文字についてはコードポイントをそのまま文字符号とする。U+10000以降の拡張領域に収録された文字はサロゲートペアの仕組みを用い、U+D800~U+DBFFから一つ、U+DC00~U+DFFFから一つを選んで組み合わせ、4バイトで表現する。
一文字を連続した複数バイトの整数値で表現するため、上位バイトが先頭側か末尾側かによって異なるバイト列となる。上位バイトが先頭側になるように並べる方式をUTF-16BE(Big Endian)、上位バイトが末尾側になるように並べる方式をUTF-16LE(Little Endian)という。
文字コードの指定などでバイト順を伝達できない場合、文書やデータの先頭にバイト順を示すBOM(Byte Order Mark)と呼ばれる符号を記載して指定するよう規定されており、UTF-16BEの場合は16進数4桁で「FE FF」、UTF-16LEの場合は「FF FE」と記載する。
UTF-32
一文字あたり4バイト(32ビット)の固定長でコードを表現する符号化方式で、単純にU+0000からU+10FFFFまでの各文字のコードポイントをそのまま文字符号とする方式を「UTF-32」という。
最も単純な表現形式で、文字よって長さが異なることがないためソフトウェアで処理しやすい。しかし、どんな文字でも4バイトで表現するためデータ量が多く、特にASCIIなら1バイトで収まる英数字が多い場合には不利となる。
UTF-16同様、文字コードの指定などでバイト順を伝達できない場合はデータの先頭に4バイトのBOMを記す。BOMが「FF FE 00 00」ならリトルエンディアン、「00 00 FE FF」ならビッグエンディアンである。
は主にデータ量の多さが敬遠され、データの保存・交換用としてはほとんど用いられることはないが、ソフトウェアが文字データの処理のために用いる内部表現として利用されることがある。入出力がUTF-8など他の形式でも内部的にはUTF-32に変換して扱っている場合もある。
なお、Unicodeの文字集合であるUCS-2を拡張した文字集合として31ビットのUCS-4を策定する構想があり、UTF-32はその符号化方式として有力だった。UCS-4はコードポイントを先頭が0に固定された32ビット(4バイト)の値で表すもので、UCS-2を丸々取り込んで更に多くの文字を収録する予定だったが、UCS-2を超える範囲への拡張は断念され、UTF-32の存在意義も低下した。