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を使わずにビッグエンディアン、または、リトルエンディアンでコード出力する符号化スキームである。
エンコード方法
- U+0000~U+FFFF(但し、U+D800~U+DFFFFを除く)は、そのまま16ビットコードを出力する。
- U+10000~U+10FFFFは、下記のエンコード規則に従って、サロゲートペアに変換する。
unicode | UTF-16 |
---|---|
000u uuuu xxxx xxxx xxxx xxxx | 1101 10ww wwxx xxxx 1101 11xx xxxx xxxx |
wwww = uuuuu - 1 |
デコード方法
- 第一ワードが0xD800~0xDB00、第二ワードが0xDC00~0xDFFFであれぱ、サロゲートペアと判断してunicodeに逆変換して出力する。第一ワードが0xD800~0xDB00で第二ワードが0xDC00~0xDFFF以外であれば不正コードと判断する。
- 上記以外は、そのまま16ビットコードを出力する。