UTF-16
[カテゴリ:仕様]
UTF-16は、Unicodeの符号化方式のひとつです。16ビットを1単位として、ひとつのUnicode符号位置を16ビットまたは32ビットで表します。16ビット固定長のUnicodeの元々の形式に基づいて拡張を施したものです。
由来
当初、Unicodeは16ビット固定長で1文字を表すのが売り文句の文字コードでした。しかし、16ビットの符号空間では最大65,536文字しか扱えず、拡張が必要となりました。
他方、Unicodeと同等の文字コード規格ISO/IEC 10646ではUCS-4という4バイトコードが定義されており、これを使うと65,536符号位置からなる面をいくつも扱うことが可能でした。Unicodeの16ビットの符号空間は面00, Basic Multilingual Plane (BMP) という位置付けです。
従って、UCS-4を使えばBMP外への拡張の問題は解決するのですが、一方で既存のUnicodeの16ビットコード(2バイトコードすなわちUCS-2)を扱うプログラムとの互換性も求められました。
そこで、BMPの中の文字の割り当てられていない符号位置を使用し、2つの符号位置の組み合わせでBMP外の1つの符号位置を表現する方法が採用されました。これがUTF-16です。例えば、BMP外の漢字U+29E3Dを表すのに、上位サロゲートD867と、下位サロゲートDE3Dの組み合わせを用います。
JIS X 0213との関係
UnicodeがJIS X 0213の文字を全て含んでいるので、UTF-16でJIS X 0213の全ての文字を符号化できます。
ただし、一部の文字がBMP以外の面にあるため、それらの文字については、UTF-16ではサロゲートペアを使って、1符号位置あたり4バイトで表されることになります。BMP内の漢字、例えば「亜」(U+4E9C) は16ビットつまり2バイトですが、Plane 02のU+29E3Dにある「ホッケ」の漢字 (魚へんに花) は、上位サロゲート2バイト、下位サロゲート2バイトで合わせて4バイト必要です。
文字列をUTF-16で扱うプログラミング言語 (Javaなど) を使うときは、サロゲートの存在を考慮しないと、こうしたBMP外の文字で問題を生じ得ます。
最終更新時間:2016年09月22日 11時13分08秒