Zum Inhalt springen
uencoder

UTF-16

UTF-16 ist Unicodes Form mit variabler Länge, die 2 oder 4 Bytes pro Codepunkt verwendet: BMP-Zeichen belegen eine 16-Bit-Codeeinheit, Zeichen der ergänzenden Ebenen ein Ersatzpaar (2 Einheiten).

Zweck

Raumeffizienz mit vollständiger Unicode-Abdeckung ausbalancieren, wo BMP-Zeichen dominieren, etwa in der Windows-API und Javas interner String-Darstellung.

Mechanismus

Ein BMP-Codepunkt (U+0000-FFFF) wird direkt als eine 16-Bit-Einheit gespeichert. Bei einem ergänzenden Codepunkt (U+10000-10FFFF) wird 0x10000 abgezogen und das Ergebnis in obere und untere 10-Bit-Hälften, versetzt um 0xD800 und 0xDC00, zu einem Ersatzpaar geteilt. Die Byte-Reihenfolge zeigt der BOM (U+FEFF) an.

Anwendungsfälle

  • Interne Zeichenketten der Windows-API
  • Interne String-Darstellung von Java/JavaScript
  • Interne Speicherung von .NET-String
  • Speicherung von Dateinamen (NTFS)

Beispiele

  • Eingabe
    A
    Output
    0x00 0x41

    UTF-16BE, 2 bytes

  • Eingabe
    😀
    Output
    0xD8 0x3D 0xDE 0x00

    A surrogate pair, 4 bytes

Häufige Fehler

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

Verwandte Begriffe

Verwandte Tools

References