CESU-8

Kodierung von Unicode, sehr ähnlich zu UTF-8

CESU-8 (kurz für Compatibility Encoding Scheme for UTF-16: 8-Bit) ist eine Variante von UTF-8, die im Unicode Technical Report #26 beschrieben wird. Der Codepoint wird zunächst in UTF-16 ausgedrückt, dann wird das Ergebnis in UTF-8 rekodiert, als wäre es UCS-2.

Kodierung

Bearbeiten

CESU-8-kodierter Text entsteht, wenn bei der Kodierung nach UTF-8 eine etwaige UTF-16-Kodierung der Ausgangsdaten nicht berücksichtigt wird, sei es aus Unkenntnis oder weil der Programmcode noch aus der Zeit stammt, in der Unicode nur ein 16-Bit-Zeichensatz war.

Bei Zeichen aus dem Bereich der Basic Multilingual Plane (Zeichen bis Nummer 65.535) sind UTF-8 und CESU-8 identisch. Zeichen außerhalb der BMP werden durch die UTF-16-Kodierung durch jeweils zwei 16-Bit-Werte (aus dem für diese Zwecke reservierten Bereich von D800hex bis DFFFhex) repräsentiert. Werden diese beiden Werte nun einzeln in UTF-8 umgewandelt, entstehen daraus jeweils 3-Byte-Sequenzen aus dem Bereich ED A0 xxED BF xx, welche in normalem UTF-8 nicht vorkommen können. Ein korrekter UTF-8-Kodierer muss dagegen zuerst die UTF-16-Kodierung der Eingangsdaten erkennen und dekodieren (wobei Code-Werte >65535 auftreten können) und anschließend erst die UTF-8-Kodierung durchführen, wobei Werte >65535 in 4-Byte-Sequenzen kodiert werden, die mit F0hex bis F4hex beginnen.

Verwendung

Bearbeiten

Da diese eigentlich „falsche UTF-8-Kodierung“ eine gewisse Verbreitung gefunden hat, wurde sie nachträglich durch das Unicode-Consortium genormt, allerdings unter dem neuen Namen CESU-8. CESU-8 wird ausdrücklich nicht als Datenaustauschformat empfohlen, sondern nur als internes Format, wenn eine Kompatibilität zu UTF-16 erforderlich ist.

CESU-8 wird z. B. von der Oracle-Datenbank-Software verwendet: Mit Version 8 wurde ein "UTF8" genannter Zeichensatz eingeführt, der aber in Wirklichkeit der CESU-8-Kodierung entspricht. Mit Version 9.0 wurde ein korrekter UTF-8-Zeichenatz eingeführt, der allerdings den Namen "AL32UTF8" erhielt, um die Kompatibilität zu vorhandenen, älteren Datenbanken zu bewahren.

Beispiel

Bearbeiten
Kodierung Unicode code point
U+0045 U+0205 U+10400
UTF-8 45 C8 85 F0 90 90 80
UTF-16 0045 0205 D801 DC00
CESU-8 45 C8 85 ED A0 81 ED B0 80

Gleiches Beispiel mit Binärdarstellung

Bearbeiten
Kodierung Hexadezimal Binär Unicode code point
UTF-8 45 0100 0101 U+0045 (E, Lateinischer Großbuchstabe E)
UTF-16 00 45 0000 0000 0100 0101
CESU-8 45 0100 0101
UTF-8 C8 85 1100 1000 1000 0101 U+0205 (ȅ, Lateinischer Kleinbuchstabe E mit Doppelgravis)
UTF-16 02 05 0000 0010 0000 0101
CESU-8 C8 85 1100 1000 1000 0101
UTF-8 F0 90 90 80 1111 0000 1001 0000 1001 0000 1000 0000 U+10400 (𐐀, Deseret-Großbuchstabe langes I)
UTF-16 High-Surrogate D8 01 1101 1000 0000 0001
Low-Surrogate DC 00 1101 1100 0000 0000
CESU-8 High ED A0 81 1110 1101 1010 0000 1000 0001
Low ED B0 80 1110 1101 1011 0000 1000 0000
Legende
0100 0101 etc. Datenbits
10000hex Größe der Ebene 0: Basic Multilingual Plane (wird für die UTF-16 Codierung abgezogen)
110110 UTF-16 High-Surrogate Kodierungsbits
110111 UTF-16 Low-Surrogate Kodierungsbits
110,

1110, 11110, 10

UTF-8 Kodierungsbits
Bearbeiten
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy