UTF-16

unicodeを16ビットコードの範囲で表現するエンコード方式。U+10000~U+10FFFFの領域は、第一ワードが0xD800~0xDBFF、第二ワードが0xDC00~0xDFFFのペアワード(サロゲートペア、日本語では代用対)で表現する。U+D800~U+DFFFFは、この用途のために予約されている。

先頭にBOM(byte order mark)としてU+FEFF(ビッグエンディアン:上位バイトが先),U+FFFE(リトルエンディアン:下位バイトが先)が出力する事によって、出力バイト順を変更する事ができる。BOMが出力されない場合のデフォルトはビッグエンディアンである。

"UTF-16BE"、または、"UTF-16LE"は、BOMを使わずにビッグエンディアン、または、リトルエンディアンでコード出力する符号化スキームである。

エンコード方法

  1. U+0000~U+FFFF(但し、U+D800~U+DFFFFを除く)は、そのまま16ビットコードを出力する。
  2. U+10000~U+10FFFFは、下記のエンコード規則に従って、サロゲートペアに変換する。
unicode UTF-16
000u uuuu xxxx xxxx xxxx xxxx 1101 10ww wwxx xxxx 1101 11xx xxxx xxxx
wwww = uuuuu - 1

デコード方法

  1. 第一ワードが0xD800~0xDB00、第二ワードが0xDC00~0xDFFFであれぱ、サロゲートペアと判断してunicodeに逆変換して出力する。第一ワードが0xD800~0xDB00で第二ワードが0xDC00~0xDFFF以外であれば不正コードと判断する。
  2. 上記以外は、そのまま16ビットコードを出力する。