Unicode
符号化方式
UTF-7
UTF-8
CESU-8
UTF-16/UCS-2
UTF-32/UCS-4
UTF-EBCDIC
SCSU
Punycode (IDN/IDNA)
GB 18030
UCS
マッピング
書字方向
BOM
漢字統合
UnicodeとHTML
Unicodeと電子メール
Unicodeフォント
UTF-16 (UCS/Unicode Transformation Format 16) は、Unicodeの文字符号化方式 (encoding scheme) であるUTFの1つ。UTFは、UnicodeではUnicode Transformation Format、ISO/IEC 10646ではUCS Transformation Formatの略とされる。ISO/IEC 10646での正式名称はUCS Transformation Format for 16 Planes of Group 00。Unicodeでは、UTF-16が正式名称である。
UTF-16では、1文字が、16ビットの符号単位1つまたは2つで符号化される。これが「-16」の名の由来である。特に、BMP内の文字は、符号単位1つで表され、(ビッグエンディアンなら)UCS-2と互換である。このため、UTF-16は2バイトコードだと誤解されることがあるが、間違いである(この説明はUCS-2に対しては正しい)。
Unicodeにおいては、厳密には、文字符号化形式 (encoding form) の1つの名称であり、かつ、UTF-16符号化形式のための文字符号化方式の1つの名称でもある。UTF-16符号化形式のための文字符号化方式には、UTF-16の他にUTF-16BE、UTF-16LEがある。
目次
1 UTF-16符号化形式
2 符号化方式
2.1 UTF-16BE符号化方式
2.2 UTF-16LE符号化方式
2.3 UTF-16符号化方式
3 普及
4 他の主なUTF
//
UTF-16では、Unicodeスカラ値U+0000..U+10FFFFを、16ビット符号なし整数を符号単位とした符号単位列で表す。符号単位列は1つまたは2つの符号単位からなる。つまり、合計は16ビットまたは32ビットである。
BMPに含まれるU+0000..U+D7FFとU+E000..U+FFFFは、そのまま符号単位1つで表す。
BMP以外のU+10000..U+10FFFFは、表のようにビットを配分して、符号単位2つで表す。
このとき使われる、D80016..DFFF16の符号単位(Unicodeスカラ値では無いので、U+xxxxとは書かない)を、サロゲートと呼び、1つのUnicodeを表す連続した2つのサロゲートをサロゲート・ペアと呼ぶ。サロゲートに使うため、BMPのこの領域には文字が収録されておらず、UTF-16以外の符号化方式では使用されない。
ちなみに、Unicodeスカラ値の最大がU+10FFFFなのは、これがUTF-16で表せる最大のスカラ値だからである。また、ISO/IEC 10646でも、11000016以上は予約領域または私用領域となっており、文字が割り当てられることは無い。
スカラ値UTF-16備考
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
000uuuuuxxxxxxxxxxxxxxxx110110wwwwxxxxxx 110111xxxxxxxxxxwwww = uuuuu - 1
UTF-16符号化形式は、Java(J2SE 5.0以上)において文字の内部表現であるchar型(16ビット符号なし整数型)として、またWindowsXPなどのOSにおけるプログラムではワイド文字として実装される。
UTF-16符号化形式で表現された文字は、16ビット符号なし整数の符号単位列でありプログラム内部での処理には都合がよいが、情報交換のためにファイルの読み書きや通信を行う場合は、適当な符号化方式によりバイト列に直列化する必要がある。
UTF-16の場合、エンディアン(バイト順序)などの違いにより、この方法には3種類かある。なお、符号化方式によって符号単位の中でのバイト順序は異なるが、符号単位の順序は変わらないことに注意。
16ビット整数をビッグエンディアンで直列化する。バイト順序マーク (BOM) は使用不可。
16ビット整数をリトルエンディアンで直列化する。バイト順序マーク (BOM) は使用不可。
バイト順序はリトルエンディアンでもビッグエンディアンでもよい。
あるデータがUTF-16符号化方式で符号化されているとわかっていても、これだけではエンディアンが決まらないので、解釈できない。そのため、バイト順序マーク (BOM) を使うことができる。
BOMはU+FEFFに割り当てられた特殊文字で、データストリームの最初に置く(テキストの最初の文字のさらに前にBOMが来る)。いっぽう、BOMのバイト順序を逆にしたU+FFFEは予約である(使用してはならない)。このため、もしバイト順序を間違えていれば、予約のはずのU+FFFEでデータが始まることとなり、間違えていたことがわかる。
BOMは使わなくてもいいが、そのときは、ビッグエンディアンにするように決められている。(ただしこれはUTF-16符号化方式での話であり、UTF-16LEはもちろんBOMなしでリトルエンディアンである)
つまり、UTF-16符号化方式のデータは、同じ内容に対し、以下の3種類が許される。
BOMで始まりビッグエンディアン
BOMで始まりリトルエンディアン
BOMで始まらずビッグエンディアン
3つ目は、UTF-16BEと同じバイト列である。
文字M?
スカラ値U+004DU+10302
符号単位列004DD800 DF02
UTF-16BE00 4DD8 00 DF 02
UTF-16LE4D 0000 D8 02 DF
UTF-16FE FF 00 4DFE FF D8 00 DF 02
FF FE 4D 00FF FE 00 D8 02 DF
00 4DD8 00 DF 02
UTF-16符号化形式は、WindowsXPなど多くのOSで、内部表現に使われている。
Microsoft Windowsでは、リトルエンディアンのUTF-16符号化方式が使われている。内部表現では16ビット符号なし整数を符号単位するUTF-16符号化形式(CEFなのでBOMはなし)として扱い、ファイルなどではBOMありのUTF-16符号化方式(リトルエンディアン)が主である。
TCP/IPネットワークでは、プロトコルヘッダやMIME等の手段で文字符号化方式を指定しない場合はビッグエンディアンに決められている。
他の主なUTF
UTF-8
UTF-32
カテゴリ: Unicode
更新日時:2008年7月14日(月)15:24
取得日時:2008/11/12 03:03