コンテンツへスキップ
uencoder

UTF-16

UTF-16はUnicodeの可変長符号化形式で、符号位置あたり2バイトまたは4バイトを使用する。BMPの文字は1つの16ビット符号単位、追加面の文字はサロゲートペア(2単位)で表する。

目的

BMP文字が中心の環境(Windows APIやJavaの内部文字列表現)で、空間効率とUnicode全体のカバーのバランスを取る。

メカニズム

BMPの符号位置(U+0000-FFFF)は1つの16ビット単位としてそのまま格納される。追加面の符号位置(U+10000-10FFFF)は0x10000を減算した上で、0xD800と0xDC00をオフセットとした上位・下位の10ビットずつに分割してサロゲートペアを構成する。バイト順はBOM(U+FEFF)で示される。

ユースケース

  • Windows APIでの内部文字列表現
  • Java/JavaScriptにおける内部文字列表現
  • .NETのStringの内部格納
  • ファイル名(NTFS)の格納

例

  • 入力
    A
    Output
    0x00 0x41

    UTF-16BE, 2 bytes

  • 入力
    😀
    Output
    0xD8 0x3D 0xDE 0x00

    A surrogate pair, 4 bytes

よくあるエラー

Ignoring surrogate pairs, producing wrong character counts
Use code-point-aware APIs or surrogate-pair-aware iteration

関連用語

関連ツール

References