Surrogate und ergänzende Zeichen

Windows-Anwendungen verwenden normalerweise UTF-16, um Unicode-Zeichendaten darzustellen. Die Verwendung von 16 Bits ermöglicht die direkte Darstellung von 65.536 eindeutigen Zeichen, aber diese basic Multilingual Plane (BMP) reicht nicht annähernd aus, um alle symbole abzudecken, die in menschlichen Sprachen verwendet werden. Unicode-Version 4.1 enthält über 97.000 Zeichen, mit über 70.000 Zeichen allein für Chinesisch.

Der Unicode-Standard hat 16 zusätzliche "Ebenen" von Zeichen festgelegt, die jeweils die gleiche Größe wie der BMP haben. Natürlich haben die meisten Codepunkte außerhalb des BMP noch keine Zeichen zugewiesen, aber die Definition der Ebenen gibt Unicode das Potenzial, 1.114.112 Zeichen (d. h. 216 * 17 Zeichen) innerhalb des Codepunktbereichs U+0000 bis U+10FF zu definieren. Damit UTF-16 diesen größeren Zeichensatz darstellt, definiert der Unicode-Standard "Zusatzzeichen".

Informationen zu zusätzlichen Zeichen

Ein zusätzliches Zeichen ist ein Zeichen, das sich außerhalb des BMP befindet, und ein "Ersatzzeichen" ist ein UTF-16-Codewert. Für UTF-16 ist ein "Ersatzpaar" erforderlich, um ein einzelnes zusätzliches Zeichen darzustellen. Das erste (hohe) Ersatzangebot ist ein 16-Bit-Codewert im Bereich U+D800 bis U+DBFF. Das zweite (niedrige) Ersatzangebot ist ein 16-Bit-Codewert im Bereich U+DC00 bis U+DFFF. Mithilfe des Ersatzmechanismus kann UTF-16 alle 1.114.112 potenziellen Unicode-Zeichen unterstützen. Weitere Informationen zu Zusätzlichen Zeichen, Ersatzzeichen und Ersatzpaaren finden Sie unter Unicode Standard.

Hinweis

Windows 2000 bietet Unterstützung für einfache Eingaben, Ausgaben und einfache Sortierung von Zusatzzeichen. Allerdings sind nicht alle Systemkomponenten mit Zusätzlichen Zeichen kompatibel.

 

Das Betriebssystem unterstützt zusätzliche Zeichen auf folgende Weise:

  • Format 12 der OpenType-Schriftart cmap-Tabelle unterstützt direkt den 4-Byte-Zeichencode. Weitere Informationen finden Sie in der OpenType-Schriftartspezifikation.
  • Windows unterstützt surrogatefähige Eingabemethoden-Editoren (IMEs).
  • Die Windows GDI-API unterstützt formatieren 12 cmap-Tabellen in Schriftarten, sodass Ersatznamen ordnungsgemäß angezeigt werden können.
  • Die Uniscribe-API unterstützt zusätzliche Zeichen.
  • Windows-Steuerelemente, einschließlich Bearbeiten und Rich Edit, unterstützen zusätzliche Zeichen.
  • Die HTML-Engine unterstützt HTML-Seiten, die zusätzliche Zeichen für die Anzeige, Bearbeitung (über Outlook Express) und Formularübermittlung enthalten.
  • Die Sortiertabelle des Betriebssystems unterstützt zusätzliche Zeichen.

Allgemeine Richtlinien für die Softwareentwicklung mit zusätzlichen Zeichen

UTF-16 behandelt zusätzliche Zeichen als Ersatzpaare. Das Betriebssystem verarbeitet ein Ersatzpaar ähnlich wie die Verarbeitung von nicht überschreibenden Markierungen. Zur Anzeigezeit wird das Ersatzpaar als eine Glyphe mithilfe von Uniscribe angezeigt, wie im Unicode-Standard vorgeschrieben.

Windows Vista führt drei neue Makros ein, um Ersatz- und Ersatzpaare in UTF-16-Zeichenfolgen zu identifizieren. Dies sind IS_HIGH_SURROGATE, IS_LOW_SURROGATE und IS_SURROGATE_PAIR.

Anwendungen unterstützen automatisch zusätzliche Zeichen, wenn sie Unicode unterstützen und Systemsteuerelemente und Standard-API-Funktionen wie ExtTextOut und DrawText verwenden. Wenn Ihre Anwendung also Standardsystemsteuerelemente verwendet oder allgemeine Aufrufe vom Typ ExtTextOut zum Anzeigen verwendet, sollten zusätzliche Zeichen ohne spezielle Codierung funktionieren.

Anwendungen, die eine eigene Bearbeitungsunterstützung implementieren, indem sie Glyphenpositionen auf angepasste Weise ausarbeiten, können Uniscribe für die gesamte Textverarbeitung verwenden. Uniscribe verfügt über separate Funktionen für komplexe Skriptverarbeitungen, z. B. Textanzeige, Treffertests und Cursorbewegungen. Eine Anwendung muss die Uniscribe-Funktionen speziell aufrufen, um diese erweiterten Features abzurufen. Beachten Sie, dass Anwendungen, die die Uniscribe-Funktionen verwenden, vollständig mehrsprachig sind, dies jedoch zu Leistungseinbußen führt. Daher sollten einige Anwendungen ihre eigene Verarbeitung von Zusatzzeichen durchführen.

Da der Ersatzmechanismus zum Darstellen zusätzlicher Zeichen gut definiert ist, kann Ihre Anwendung Code für die UTF-16-Ersatztextverarbeitung enthalten. Wenn die Anwendung einen getrennten UTF-16-Wert aus dem unteren reservierten Ersatzbereich (ein niedriges Ersatzangebot) oder dem oberen reservierten Ersatzbereich (ein hohes Ersatzgat) findet, muss der Wert eine Hälfte eines Ersatzpaars sein. Daher kann die Anwendung ein Ersatzpaar erkennen, indem sie eine einfache Bereichsprüfung durchführt. Wenn ein UTF-16-Wert im unteren oder oberen Bereich auftritt, muss eine 16-Bit-Breite rückwärts oder vorwärts nachverfolgt werden, um den Rest des Zeichens abzurufen. Beachten Sie beim Schreiben Ihrer Anwendung, dass CharNext und CharPrev um 16-Bit-Codepunkte und nicht um Ersatzpaare verschoben werden.

Hinweis

Eigenständige Ersatzcodepunkte verfügen entweder über einen hohen Ersatz ohne angrenzenden niedrigen Ersatz oder umgekehrt. Diese Codepunkte sind ungültig und werden nicht unterstützt. Ihr Verhalten ist nicht definiert.

 

Wenn Sie einen Schriftart- oder IME-Anbieter entwickeln, beachten Sie, dass vor Windows XP-Betriebssystemen die Unterstützung für zusätzliche Zeichen standardmäßig deaktiviert ist. Windows XP und höher aktivieren standardmäßig zusätzliche Zeichen. Wenn Sie ein Schriftart- und IME-Paket bereitstellen, das zusätzliche Zeichen erfordert, muss Ihre Anwendung die folgenden Registrierungswerte festlegen:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\LanguagePack]
SURROGATE=(REG_DWORD)0x00000002

[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\International\Scripts\42]
IEFixedFontName=[Surrogate Font Face Name]
IEPropFontName=[Surrogate Font Face Name]

Zeichensätze