CESU-8 - CESU-8
Das Compatibility Encoding Scheme for UTF-16: 8-Bit ( CESU-8 ) ist eine Variante von UTF-8 , die im Unicode Technical Report #26 beschrieben wird. Ein Unicode-Codepunkt aus der Basic Multilingual Plane (BMP), also ein Codepunkt im Bereich U+0000 bis U+FFFF, wird wie in UTF-8 codiert. Ein Unicode-Ergänzungszeichen, dh ein Codepoint im Bereich U+10000 bis U+10FFFF, wird zunächst wie in UTF-16 als Surrogatpaar dargestellt und dann wird jeder Surrogatcodepoint in UTF-8 codiert. Daher benötigt CESU-8 sechs Byte (3 Byte pro Ersatzzeichen) für jedes Unicode-Ergänzungszeichen, während UTF-8 nur vier benötigt. Obwohl im technischen Bericht nicht angegeben, werden ungepaarte Surrogate auch mit jeweils 3 Byte codiert, und CESU-8 entspricht genau der Anwendung eines älteren UCS-2 zu UTF-8-Konverters auf UTF-16-Daten.
Die Kodierung von Unicode-Nicht-BMP-Zeichen funktioniert 11101101 1010yyyy 10xxxxxx 11101101 1011xxxx 10xxxxxx
(yyyy repräsentiert die oberen fünf Bits des Zeichens minus eins). Der Bytewert 0xF0 wird in CESU-8 nicht angezeigt, da er die von UTF-8 verwendete 4-Byte-Codierung startet.
CESU-8 ist kein offizieller Teil des Unicode-Standards, da Unicode Technical Reports nur informative Dokumente sind. Es sollte ausschließlich für die interne Verarbeitung und niemals für den externen Datenaustausch verwendet werden.
Die Unterstützung von CESU-8 in HTML- Dokumenten ist durch die W3C- und WHATWG- HTML-Standards verboten , da dies eine Cross-Site-Scripting- Schwachstelle darstellen würde.
Javas modifiziertes UTF-8 ist CESU-8 mit einer speziellen überlangen Kodierung des NUL-Zeichens (U+0000) als Zwei-Byte-Sequenz C0 80
.
Die Oracle-Datenbank verwendet CESU-8 für ihren "UTF8"-Zeichensatz. Standard-UTF-8 kann mit dem Zeichensatz " AL32UTF8 " bezogen werden (seit Oracle Version 9.0).
Beispiele
Codepunkt | U+0045 | U+0205 | U+10400 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Charakter | E | ȅ | 𐐀 | ||||||||||||
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 |