UTF-16

Unicode-Zeichenkodierung
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 23. Oktober 2004 um 20:48 Uhr durch 62.219.119.20 (Diskussion) (+he übersetzt). Sie kann sich erheblich von der aktuellen Version unterscheiden.

UTF-16 (UCS-2) ist eine Kodierung für Unicode-Zeichen, bei der jedes Zeichen der "Basic multilingual plane" (BMP) direkt auf seinen 16-Bit-Zeichencode abgebildet wird. Dabei steht UTF für UCS Transformation Format.

Unicode-Zeichen, deren Kode sich nicht mit 16 Bit darstellen lässt, belegen zwei 16-Bit-Wörter, welche sich aus so genannten "Ersatz"-Zeichen (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 0 x x x x|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 x x|x x 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|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Die beiden Ersatzzeichen werden in der Reihenfolge "High Surrogate" "Low Surrogate" gesendet. Es lassen sich somit Unicode-Zeichen bis zu U+0FFFFF 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, 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.

Siehe auch: UTF-7, UTF-8, UTF-32, Unicode