Schreiben, Zuordnen und Sortieren von EUDC- und PUA-Zeichen

Anwendungen schreiben mithilfe von Ausgabefunktionen wie TextOut und ExtTextOutbenutzerdefinierte Zeichen (EUDCs) und PUA-Zeichen (Private Use Area) auf den Bildschirm oder Drucker, genau wie sie andere Zeichen schreiben. Diese Funktionen rufen automatisch Zeicheninformationen aus EUDC- oder PUA-Zeichenschriftarten ab, wenn EUDC aktiviert ist. Weitere Informationen finden Sie unter Vom Endbenutzer definierte und private _ Verwendungsbereichszeichen.

Beim Schreiben von EUDCs oder PUA-Zeichen hängt der Vorgang der Textausgabefunktion von der aktuell ausgewählten Schriftart ab. Wenn die ausgewählte Schriftart eine integrierte EUDC- oder PUA-Zeichenschriftart ist, ruft die Funktion Zeicheninformationen aus dieser Schriftart ab. Wenn es sich bei der ausgewählten Schriftart um eine DBCS-TrueType-Schriftart (Double-Byte Character Set) handelt, der eine separate EUDC-Schriftart zugeordnet ist, ruft die Funktion Informationen aus der angegebenen EUDC-Schriftart ab. Wenn es sich bei der ausgewählten Schriftart um eine Unicode TrueType-Schriftart handelt, der eine separate PUA-Zeichenschriftart zugeordnet ist, ruft die Funktion Informationen aus der PUA-Zeichenschriftart ab. Wenn der ausgewählten Schriftart keine EUDC- oder PUA-Zeichenschriftart zugeordnet ist, ruft die Funktion Informationen aus der EUDC-Standardschriftart des Systems ab. Wenn sich das Zeichen nicht in der EUDC-Standardschriftart des Systems befindet oder es keine EUDC-Standardschriftart des Systems gibt, schreibt die Funktion das von der ausgewählten Schriftart definierte Standardzeichen.

Anwendungen können EUDCs mithilfe der Funktionen MultiByteToWideChar und WideCharToMultiByte Unicode zuordnen. Die MultiByteToWideChar-Funktion ordnet die meisten EUDCs Zeichen im Unicode-PUA zu. Um jedoch bestimmte nationale oder regionale Standards zu unterstützen, können einige EUDCs Nicht-PUA-Unicode-Codepunkten zugeordnet werden. Die WideCharToMultiByte-Funktion ordnet ein Zeichen in der PUA dem EUDC-Gegenstück zu, wenn eine solche Zuordnung vorhanden ist und der Codepunkt keine gültige Nicht-PUA-Zuordnung in Unicode hat. Nicht alle Codepages verfügen über einen EUDC-Bereich. Die in einem Aufruf von WideCharToMultiByte angegebene Codepage muss einen EUDC-Codebereich enthalten, damit die Zuordnung zum EUDC-Bereich erfolgen kann. Wenn die Codepage keinen EUDC-Codebereich enthält, ruft die Funktion das Standardzeichen für alle Zeichen im Unicode-PUA ab.

MultiByteToWideChar und WideCharToMultiByte garantieren keine Roundtripzuordnung. Anders ausgedrückt: Es ist möglich, mit einer bestimmten Multibytezeichenfolge zu beginnen, die EUDCs enthält, die Zeichenfolge Unicode mit MultiByteToWideChar zu zuordnen und sie dem ursprünglichen DBCS mit WideCharToMultiByte wieder zu zuordnen, und am Ende erhalten Sie ein Ergebnis, das nicht mit der ursprünglichen Zeichenfolge identisch ist. Anwendungen, die EUDCs Unicode zuordnen, sollten sicherstellen, dass alle erforderlichen Zeichen einen Roundtrip zwischen dem entsprechenden EUDC-Bereich der Codepage und dem Unicode-PUA ausführen können.

Anwendungen sollten nicht versuchen, EUDCs von einer Codepage zu einer anderen zu zuordnen. Wenn eine Anwendung mit einem EUDC von einer Codepage aus beginnt, unicode mit MultiByteToWideCharzuweist und einem anderen DBCS mit WideCharToMultiBytezuweist, gibt es keine Garantien für die Ergebnisse. Das ursprüngliche Zeichen kann einem anderen EUDC auf der Zielcodepage oder als nicht definiertes Zeichen zugeordnet werden. Ebenso kann die Zuordnung einer Unicode-Zeichenfolge zu einer Codepage, die über einen EUDC-Bereich verfügt, unbeabsichtigte Ergebnisse haben. Wenn die Unicode-Zeichenfolge einen PUA-Codepunkt enthält, ist es möglich, dass der Codepunkt einem EUDC zugeordnet wird, das nicht dasselbe Zeichen repräsentiert.

Anwendungen können DBCS-Zeichenfolgen vergleichen, die EUDCs enthalten, indem sie die ANSI-Version der CompareString-Funktion verwenden. Die -Funktion ordnet die Zeichen effektiv Unicode zu, bevor Zeichenwerte verglichen werden. Anwendungen können einen Sortierschlüssel für die Zeichenfolge erstellen, indem sie die ANSI-Version der LCMapString-Funktion und den LCMAP _ SORTKEY-Wert verwenden. Diese Funktion ordnet Zeichen effektiv zuerst Unicode zu. Alle Zeichen im PUA werden nach allen anderen Unicode-Zeichen sortiert. Innerhalb des Bereichs werden Zeichen in numerischer Reihenfolge sortiert. Wenn eine Anwendung versucht, CTYPE-Informationen für ein EUDC mithilfe der GetStringTypeA-Funktion abzurufen, ruft die Funktion NULL für jedes Zeichen ab.

Verwenden von Unicode und Zeichensätzen