|
Kategorie: Definition
Surrogate pair
Ein surrogate pair ist die Darstellung eines "16-bit Unicode Wertes"
als UTF-16, welches ursprünglich nicht in der Lage war Zeichen darzustellen, die oberhalb
von 0xFFFF lagen. Man einigte sich daher auf eine Ersatz(surrogate)-darstellung für nicht
darstellbare Unicode-Zeichen. Das erste surrogate pair ("first high surrogate pair" oder
"first upper surrogate pair") ist ein 16-bit-code-Wert im Bereich zwischen
U+D800 und U+DBFF. Das zweite surrogate pair (second low surrogate pair) ist ein
16-bit-code-Wert im Bereich zwischen U+DC00 to U+DFFF.
Surrogate pairs sind zu der Zeit entstanden als das Unicode Consortium erkannte, dass 16
Bits
nicht ausreichen, um alle Schriftzeichen also Characters der Welt darzustellen. Der bereits existierende
UCS-2 16-bit-code hatte noch einen nicht belegten Bereich zwischen 0xD800-0xDFFF, der kurzerhand in
zwei Teile unterteilt wurde. Der erste Bereich zwischen U+D800 und U+DBFF repräsentiert die obere Hälfte,
also die "upper half" oder "high half" der Schriftzeichen während der Bereich zwischen
U+DC00 to U+DFFF als untere Hälfte, also die "lower half" der Schriftzeichen darstellt.
Damit war man im Stande weiter 1024 * 1024 = 1048576 Schriftzeichen darzustellen. Das waren mehr als
benötigt. Diese "half-character" werden nun als "surrogate pair" bezeichnet.
Beispiel für eine Entschlüsselung eines surrogate pairs
1. Zuerst wird von Wert des Unicode-Character 0x10000 subtrahiert.
Der Wert eines Characters kann beispielsweise aus der Datenbank der
Unicode Home Page
ermittelt werden.
0x2A6D6 - 0x10000 = 0x1A6D6
2. Anschließend wird das hexadezimale Ergebnis der Subtraktion in einen binären Wert umgewandelt.
0x1A6D6 (hex) = 11010011011010110
3. Der Binärwert sollte 20 Ziffern lang sein. Ist das nicht der Fall so werden dem Wert einfach die
entsprechende Anzahl an fehlenden (führenden) Ziffern mit "0" aufgefüllt.
11010011011010110 = 00011010011011010110
4. Dieser 20-stellige Binärwert wird nun in zwei Hälften geteilt.
00011010011011010110 = 0001101001 1011010110
5. Um nun den das Entsprechende Unicode-Zeichen zu erhalten werden so genannte Templates, also Vorlagen mit den beiden
Binärwerten aufgefüllt.
110110xxxxxxxxxx 110111xxxxxxxxxx
0001101001 1011010110
=
1101100001101001 1101111011010110
6. Darus ergibt sich das surrogate pair
|