UTF-16 - LinkFang.de





UTF-16


UTF-16 (englisch für Universal Multiple-Octet Coded Character Set (UCS) Transformation Format for 16 Planes of Group 00) ist eine Kodierung mit variabler Länge für Unicode-Zeichen. UTF-16 ist für die häufig gebrauchten Zeichen aus der Basic multilingual plane (BMP) optimiert. Es ist das älteste der Unicode-Kodierungsformate.

Allgemeines

Bei der UTF-16-Kodierung wird jedem Unicode-Zeichen eine speziell kodierte Kette von ein oder zwei 16-Bit-Einheiten zugeordnet, so dass sich wie auch bei den anderen UTF-Formaten alle Unicode-Zeichen abbilden lassen.

Während UTF-8 eine zentrale Bedeutung in Internet-Protokollen hat, wird UTF-16 vielerorts zur internen Zeichenkettenrepräsentation verwendet, beispielsweise in aktuellen Versionen von Java.

Eigenschaften

Aufgrund der Kodierung aller Zeichen der BMP in zwei Bytes hat die UTF-16-Kodierung den doppelten Platzbedarf im Vergleich zu geeigneten ISO-8859-Kodierungen sowie bei Texten, welche hauptsächlich aus lateinischen Buchstaben bestehen, auch zu UTF-8. Werden jedoch viele BMP-Zeichen jenseits des Codepoints U+007F codiert, hat UTF-16 vergleichbaren, bei vielen Zeichen jenseits von U+07FF sogar weniger Platzbedarf als UTF-8.

Es besteht im Gegensatz zu UTF-8 keine Kodierungsreserve. Wird ein UTF-16-kodierter Text als ISO 8859-1 interpretiert, sind sämtliche auch in letzterer Kodierung enthaltenen Buchstaben zwar erkennbar, aber durch Null-Bytes getrennt. Bei anderen ISO-8859-Kodierungen ist die Kompatibilität schlechter.

Normung

UTF-16 wird sowohl vom Unicode-Konsortium als auch von ISO/IEC 10646 definiert. Unicode definiert dabei zusätzliche Semantik. Ein genauer Vergleich findet sich im Anhang C des Unicode-4.0-Standards.[1] Die ISO-Norm definiert weiterhin eine Kodierung UCS-2, in der jedoch nur 16-Bit-Darstellungen der BMP zulässig sind.

Kodierung

Die Zeichen der BMP werden direkt auf die 16 Bits einer UTF-16-Code-Unit abgebildet. Die BMP enthält die Unicode-Zeichen, deren Code im Bereich U+0000 bis U+FFFF liegt.

Unicode-Zeichen außerhalb der BMP (d. h. U+10000 bis U+10FFFF) werden durch zwei 16-Bit-Wörter (engl. code units) dargestellt, die wie folgt gebildet werden:

Von der Nummer des Zeichens wird zunächst die Zahl 65536 (10000hex) abgezogen (= Größe der BMP), wodurch eine 20-Bit-Zahl im Bereich von 00000hex bis FFFFFhex entsteht, die anschließend in zwei Blöcke zu je 10 Bit aufgeteilt und dem ersten Block die Bitfolge 110110, dem zweiten Block dagegen die Bitfolge 110111 vorangestellt wird. Das erste der beiden so entstandenen 16-Bit-Wörter bezeichnet man als High-Surrogate, das zweite als Low-Surrogate, und ihren Namen entsprechend enthält das High-Surrogate die 10 höherwertigen, das Low-Surrogate die 10 niederwertigen Bits des um 65536 verringerten ursprünglichen Zeichencodes.

Die Codebereiche von U+D800 bis U+DBFF (High-Surrogates) und von U+DC00 bis U+DFFF (Low-Surrogates) sind speziell für solche UTF-16-Ersatzzeichen reserviert und enthalten daher keine eigenständigen Zeichen.

Bei der Umwandlung von UTF-16-kodierten Zeichenketten in UTF-8-Bytefolgen ist zu beachten, dass Paare aus High- und Low-Surrogates zuerst wieder zu jeweils einem Unicode-Zeichencode zusammengefasst werden müssen, bevor dieser dann in eine UTF-8-Bytefolge umgewandelt werden kann (Beispiel in der Beschreibung zu UTF-8). Da dies oft nicht beachtet wird, hat sich eine andere, inkompatible Kodierung für die Ersatzzeichen etabliert, die im Nachhinein als CESU-8 normiert worden ist.

Byte Order

Je nachdem, welches der beiden Bytes zuerst übertragen bzw. gespeichert wird, spricht man von Big Endian (UTF-16BE) oder Little Endian (UTF-16LE). Unabhängig davon kommt die High Surrogate vor der Low Surrogate.

Bei unzureichend spezifizierten Protokollen wird empfohlen, das Unicode-Zeichen U+FEFF (BOM, byte order mark), das für ein Leerzeichen mit Breite Null und ohne Zeilenumbruch (zero width no-break space) steht, an den Anfang des Datenstroms zu setzen – wird es als das ungültige Unicode-Zeichen U+FFFE (not a character) interpretiert, heißt das, dass die Byte-Reihenfolge zwischen Sender und Empfänger verschieden ist und die Bytes jedes 16-Bit-Worts beim Empfänger vertauscht werden müssen, um den sich anschließenden Datenstrom korrekt auszuwerten.

Beispiele

In folgender Tabelle sind einige Kodierungsbeispiele für UTF-16 angegeben:

Beispiele für UTF-16 Kodierungen
Zeichen Unicode Unicode binär UTF-16BE binär UTF-16BE hexadezimal
Buchstabe y U+0079 00000000 01111001 00000000 01111001 00 79
Buchstabe ä U+00E4 00000000 11100100 00000000 11100100 00 E4
Eurozeichen U+20AC 00100000 10101100 00100000 10101100 20 AC
Violinschlüssel
Kategorien: Unicode

Quelle: Wikipedia - http://de.wikipedia.org/wiki/UTF-16 (Vollständige Liste der Autoren des Textes [Versionsgeschichte])    Lizenz: CC-by-sa-3.0

Änderungen: Alle Bilder mit den meisten Bildunterschriften wurden entfernt. Ebenso alle zu nicht-existierenden Artikeln/Kategorien gehenden internen Wikipedia-Links (Bsp. Portal-Links, Redlinks, Bearbeiten-Links). Entfernung von Navigationsframes, Geo & Normdaten, Mediadateien, gesprochene Versionen, z.T. ID&Class-Namen, Style von Div-Containern, Metadaten, Vorlagen, wie lesenwerte Artikel. Ansonsten sind keine Inhaltsänderungen vorgenommen worden. Weiterhin kann es durch die maschinelle Bearbeitung des Inhalts zu Fehlern gerade in der Darstellung kommen. Darum würden wir jeden Besucher unserer Seite darum bitten uns diese Fehler über den Support mittels einer Nachricht mit Link zu melden. Vielen Dank!

Stand der Informationen: August 201& - Wichtiger Hinweis: Da die Inhalte maschinell von Wikipedia übernommen wurden, ist eine manuelle Überprüfung nicht möglich. Somit garantiert LinkFang.de nicht die Richtigkeit und Aktualität der übernommenen Inhalte. Sollten die Informationen mittlerweile fehlerhaft sein, bitten wir Sie darum uns per Support oder E-Mail zu kontaktieren. Wir werden uns dann innerhalb von spätestens 10 Tagen um Ihr Anliegen kümmern. Auch ohne Anliegen erfolgt mindestens alle drei Monate ein Update der gesamten Inhalte.