【ゆーてぃーえふじゅうろく】

UTF-16 とは?

最終更新:
💡 16ビットの箱を、必要に応じて2つ使う文字表現

Unicodeの文字を16ビットの単位1つまたは2つで表す符号化方式。常に1文字が2バイトになるわけではなく、補助平面の文字には2つの単位を使います。

📌 このページのポイント
UTF-16:16ビット単位で表す A:U+0041 笑顔:U+1F600 0041 D83D DE00 1単位 2単位:サロゲートペア UTF-16LEのバイト列(BOMなし) 41 00 3D D8 00 DE 各16ビット単位の下位バイトが先
Aと笑顔の絵文字を表す符号単位とバイト列の例。符号単位数とコードポイント数、見た目の文字数は分けて考える。
ひよこ ひよこ
UTF-16なら、どの文字も16ビットで入るの?
ペンギン先生 ペンギン先生
16ビットなのは符号単位という箱の大きさだよ。「A」のように1箱で入るものと、2箱必要なものがあるんだ。1箱は2バイトなので、1つのUnicodeの値に2バイトか4バイトを使うね。
ひよこ ひよこ
2箱になるのは、どんな文字?
ペンギン先生 ペンギン先生
たとえば笑顔の絵文字😀のU+1F600だよ。UTF-16の符号単位ではD83DとDE00の組になるんだ。この2つをサロゲートペアと呼び、両方を合わせて1つの値を表すよ。
ひよこ ひよこ
実際のファイルにはどう並ぶの?
ペンギン先生 ペンギン先生
バイトオーダーマークを付けないUTF-16LEで「A😀」を保存する例なら、41 00 3D D8 00 DEの6バイトだよ。Aが1単位、絵文字が2単位で合計3単位。LEは各16ビット単位の下位バイトを先に並べるという意味なんだ。
ひよこ ひよこ
2箱の途中で文字列を切っても大丈夫なの?
ペンギン先生 ペンギン先生
途中で切ると片方だけのサロゲートが残り、正しいUTF-16の並びでなくなる場合があるよ。また、見た目の1文字が複数のUnicodeの値からできることもある。符号単位数、コードポイント数、見た目の文字数は分けて考えようね。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「UTF-16」って出てきたら「16ビット単位を1つか2つ使うUnicodeの表し方」と思えればだいたいOK!
📖 おまけ:英語の意味
「Unicode Transformation Format — 16-bit」 = Unicodeの16ビット単位の変換形式
💬 16は1文字の固定サイズではなく、符号単位のビット数を指すんだよ

参考資料

← 用語集にもどる