UTF-16

UTF-16とは



UTF-16は、UnicodeおよびISO/IEC 10646|ISO_IEC 10646で定義される文字符号化方式の一つです。この方式では、1文字16ビットの符号単位1つ、または2つで表現します。そのため、名称に「-16」が含まれています。基本多言語面(BMP)に属する文字は1つの16ビットで表されますが、BMP外の文字は2つの16ビット、つまり32ビットで表現されます。

よく誤解される点として、UTF-16は常に2バイトの符号化方式であるという認識がありますが、実際には4バイトで表現されるケースも存在します。


UTF-16の構造



UnicodeにおけるUTF-16は、文字符号化フォームおよび文字符号化スキームという二つの側面を持っています。UTF-16符号化形式のための文字符号化スキームとしては、UTF-16の他に、UTF-16BE(ビッグエンディアン)、UTF-16LE(リトルエンディアン)が存在します。

UTF-16では、Unicodeの符号位置(Unicodeスカラ値)を、16ビットの符号なし整数である符号単位で表現します。この符号単位は1つまたは2つで構成され、合計で16ビットまたは32ビットになります。

  • - BMPに含まれるU+0000からU+D7FF、およびU+E000からU+FFFFの範囲の文字は、1つの符号単位で表現されます。
  • - BMP外のU+10000からU+10FFFFの範囲の文字は、2つの符号単位で表現されます。この際、U+D800からU+DFFFの範囲の符号位置が「代用符号位置(サロゲートコードポイント)」として使用されます。
  • - 2つの代用符号位置で表されるペアを「サロゲートペア」と呼びます。この代用符号位置は、UTF-16でのみ使用され、UTF-8やUTF-32では使用されません。

Unicodeの符号位置の最大値がU+10FFFFであるのは、UTF-16で表現可能な最大値に対応しています。


符号化スキーム



UTF-16で表現された文字は、16ビット符号なし整数の符号単位列として扱われ、プログラム内部での処理に適しています。しかし、ファイルへの書き込みや通信を行う際には、バイト列に変換するための符号化スキームが必要です。

符号化スキームには、UTF-16、UTF-16BE、UTF-16LEの3種類があります。
  • - UTF-16BEは、16ビット整数をビッグエンディアンで直列化します。
  • - UTF-16LEは、リトルエンディアンで直列化します。

UTF-16BEとUTF-16LEでは、バイト順マーク(BOM)の付与は原則として許可されていません。一方、UTF-16の場合は、BOMによってエンディアンを指定するか、上位プロトコルで指定がない場合はビッグエンディアンとすることが定められています。


他の符号化方式との比較



UTF-8やUTF-32と比較すると、一般的な日本語の文章ではUTF-16が最も小さいサイズになることが多いです。ただし、追加面の文字が含まれる場合は、バイト順でソートしても符号位置順とはなりません。また、UTF-16はASCII互換ではありません。

Shift_JISとの比較では、Shift_JISは1バイト文字と2バイト文字の値範囲が重複しているため、検索や文字の区切りで問題が発生しやすいです。一方、UTF-16では、1符号単位文字、サロゲートペアの前半、後半の符号単位がそれぞれ異なる値範囲を持つため、このような問題は発生しません。UTF-16では、一部のデータが欠落した場合でも、影響を受けるのはその文字のみです。


利用例



UTF-16は、WindowsやJava(J2SE 5.0以上)で内部表現として利用されています。Windowsでは、16ビット符号なし整数を符号単位とするUTF-16符号化形式を使用し、ファイルなどではBOM付き(リトルエンディアン)のUTF-16符号化スキームが主に用いられます。

TCP/IPネットワークでは、プロトコルヘッダやMIMEなどで文字符号化スキームが指定されていない場合は、ビッグエンディアンが採用されます。


まとめ



UTF-16は、Unicodeを効率的に表現するための重要な符号化方式であり、特にWindowsやJavaの環境で広く利用されています。その構造や他の符号化方式との違いを理解することで、文字コードに関する問題を適切に処理できるようになります。


参考資料



  • - Unicode Terminology English - Japanese. Unicode, Inc. (2010年1月1日閲覧)


関連項目



もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。