A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y  Z  Sonderzeichen  sybase-tech-blog


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

    0xD869 0xDED6