Freigeben über


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

Anwendungen schreiben endbenutzerdefinierte Zeichen (EUDCs) und PUA-Zeichen (Private Use Area) auf den Bildschirm oder Drucker, indem sie andere Zeichen schreiben, indem sie Ausgabefunktionen wie TextOut und ExtTextOut verwenden. Diese Funktionen rufen automatisch Zeicheninformationen aus EUDC- oder PUA-Zeichenschriftarten ab, wenn EUDC aktiviert ist. Weitere Informationen finden Sie unter End-User_Defined und Private Use Area Characters.

Beim Schreiben von EUDCs- oder PUA-Zeichen hängt der Betrieb der Textausgabefunktion von der aktuell ausgewählten Schriftart ab. Wenn es sich bei der ausgewählten Schriftart um eine integrierte EUDC- oder PUA-Zeichenschrift handelt, 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, die eine separate EUDC-Schriftart aufweist, ruft die Funktion Informationen aus der angegebenen EUDC-Schriftart ab. Wenn es sich bei der ausgewählten Schriftart um eine Unicode TrueType-Schriftart handelt, die über eine separate PUA-Zeichenschriftart verfügt, ruft die Funktion Informationen aus der PUA-Zeichenschriftart ab. Wenn die ausgewählte Schriftart keine zugeordnete EUDC- oder PUA-Zeichenschrift aufweist, ruft die Funktion Informationen aus der Systemstandardschriftart EUDC ab. Wenn sich das Zeichen nicht in der EUDC-Standardschriftart des Systems befindet oder keine EUDC-Standardschriftart des Systems vorhanden ist, schreibt die Funktion das Standardzeichen, das durch die ausgewählte Schriftart definiert wird.

Anwendungen können EUDCs mit den Funktionen MultiByteToWideChar und WideCharToMultiByte zu und aus 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 Unicode-Codepunkte ohne PUA zugeordnet werden. Die WideCharToMultiByte-Funktion ordnet ein Zeichen im PUA seiner EUDC-Entsprechung zu, wenn eine solche Zuordnung vorhanden ist und wenn der Codepunkt keine gültige Nicht-PUA-Zuordnung in Unicode aufweist. 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 erfolgt. 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. Mit anderen Worten, es ist möglich, mit einer bestimmten Multibytezeichenfolge zu beginnen, die EUDCs enthält, die Zeichenfolge Unicode mit MultiByteToWideChar zuzuordnen und sie dem ursprünglichen DBCS mit WideCharToMultiByte zuzuordnen und am Ende mit einem Ergebnis zu enden, das nicht mit der ursprünglichen Zeichenfolge identisch ist. Anwendungen, die auf der Zuordnung von EUDCs zu Unicode angewiesen sind, sollten sicherstellen, dass alle erforderlichen Zeichen einen Roundtrip zwischen dem entsprechenden Codepage-EUDC-Bereich und dem Unicode-PUA vornehmen können.

Anwendungen sollten nicht versuchen, EUDCs von einer Codepage zur anderen zuzuordnen. Wenn eine Anwendung mit einem EUDC von einer Codepage aus beginnt, sie Unicode mit MultiByteToWideChar ordnet und einem anderen DBCS mit WideCharToMultiByte zugeordnet wird, gibt es keine Garantien für die Ergebnisse. Das ursprüngliche Zeichen kann einem anderen EUDC auf der Zielcodepage zugeordnet werden, oder es kann als nicht definiertes Zeichen zugeordnet werden. Ebenso kann das Zuordnen einer Unicode-Zeichenfolge zu einer Codepage mit einem EUDC-Bereich unbeabsichtigte Ergebnisse aufweisen. Wenn die Unicode-Zeichenfolge einen PUA-Codepunkt enthält, ist es möglich, dass der Codepunkt einem EUDC zugeordnet wird, der nicht dasselbe Zeichen darstellt.

Anwendungen können DBCS-Zeichenfolgen, die EUDCs enthalten, mit der ANSI-Version der CompareString-Funktion vergleichen. Die Funktion ordnet die Zeichen vor dem Vergleich von Zeichenwerten effektiv Unicode zu. 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