article

UTF-16 (engl. Abkürzung für: Universal Multiple-Octet Coded Character Set (UCS) Transformation Format for 16 Planes of Group 00) ist eine Kodierung für Unicode-Zeichen, optimiert auf die häufig gebrauchten Zeichen aus der „Basic multilingual plane“ (BMP).

UTF-16 wird sowohl vom Unicode-Konsortium als auch von ISO/IEC 10646 definiert. Unicode definiert dabei zusätzliche Semantik. Einen genauen Vergleich findet sich im Anhang C des Unicode-4.0-Standards. Die ISO-Norm definiert weiterhin eine Kodierung UCS-2, diese erlaubt aber nur 16-Bit-Darstellungen der BMP.

Die BMP enthält die Unicode-Zeichen, deren Code im Bereich U+0000 bis U+FFFF liegt. In diesem Bereich sind für UTF-16 Ersatz-Zeichen (engl. surrogate characters) reserviert.

Die Zeichen aus der BMP werden dabei direkt auf die 16 Bits einer UTF-16-Code-Unit abgebildet. Unicode-Zeichen, deren Code sich nicht mit 16 Bit darstellen lässt, belegen zwei 16-Bit-Wörter (engl: code units), welche sich aus so genannten Ersatzzeichen (engl: surrogate character) wie folgt zusammensetzen:

Bit 31 24|23 16|15 8|7 0| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |0 0 0 0 0 0 0 0|0 0 0 z z z z z|x x x x x x y y|y y y y y y y y| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

High-Surrogate (U+D800 ... U+DBFF)

|15 8|7 0| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |1 1 0 1 1 0 Z Z|Z Z x x x x x x| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Low-Surrogate (U+DC00 ... U+DFFF)

|15 8|7 0| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |1 1 0 1 1 1 y y|y y y y y y y y| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Hierbei gilt: ZZZZ=zzzzz-1.

Hieraus ergibt sich der zulässige Wertebereich für UTF-16:

zzzzz=00000-> ein 16-Bit-Wort-> U+00xxxx
andernfalls:ZZZZ=0000..1111-> zzzzz=00001..10000-> U+01xxxx .. U+10xxxx

Die beiden Ersatzzeichen werden in der Reihenfolge High Surrogate Low Surrogate gesendet. Es lassen sich somit Unicode-Zeichen bis zu U+10FFFF kodieren.

Bei der Übertragung von UTF-16-Daten z. B. über ein Netzwerk und beim Speichern auf Datenträgern werden die beiden Bytes, aus denen ein 16-Bit-Wort besteht, nacheinander übertragen. Je nach der Byte-Reihenfolge der Rechnerarchitektur werden sie dabei in einer von zwei unterschiedlichen Reihenfolgen angeordnet. Dadurch ergeben sich zwei verschiedene Codierungen, die als UTF-16BE (Big Endian) und UTF-16LE (Little Endian) bezeichnet werden:

UTF-16-Zeichen

Bit |15 8|7 0| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |y y y y y y y y|x x x x x x x x| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

UTF-16BE-Codierung

1. Byte 2. Byte |7 0| |7 0| +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+ |y y y y y y y y| |x x x x x x x x| +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+

UTF-16LE-Codierung

1. Byte 2. Byte |7 0| |7 0| +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+ |x x x x x x x x| |y y y y y y y y| +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+

Um diese Codierungen unterscheiden zu können, wird empfohlen, das Unicode-Zeichen U+FEFF (BOM, byte order mark), das für ein Leerzeichen mit Breite Null und ohne Zeilenumbruch steht, an den Anfang des Datenstroms zu setzen. Wird dieses als U+FFFE – welches ein ungültiges Unicode-Zeichen ist – empfangen, dann bedeutet dies, dass die Bytereihenfolge zwischen Sender und Empfänger unterschiedlich ist und somit beim Empfänger die Bytes jedes 16-Bit-Wortes vertauscht werden müssen.

Bei der Umwandlung von UTF-16-Strings in UTF-8-Bytefolgen ist zu beachten, dass die Ersatzzeichen (surrogates) zuerst zu einem Unicode-Zeichencode zusammengefasst werden müssen, bevor diese dann in eine UTF-8-Bytefolge umgewandelt werden können. (Beispiel auf der Beschreibung zu UTF-8).

Links


Unicode

UTF-16 | UTF-16/UCS-2 | UTF-16 | UTF-16 | UTF-16 | UTF-16 | UTF-16 | UTF-16 | UTF-16 | UTF-16 | UTF-16 | UTF-16

 

This article is licensed under the GNU Free Documentation License. It uses material from the "UTF-16".

Home Pageartsbusinesscomputersgameshealthhospitalshomekids & teensnewsphysiciansrecreationreferenceregionalscienceshoppingsocietysportsworld