| Deutschland - Deutsch |
|
|
|
![]() |
Informationsblatt zu Internationalisierungsfunktionen von HP-UX 11.0 - 11i > Kapitel 7 Sonstige ÄnderungenErweiterte Multibyte-Unterstützung und Unix98 Unterstützung [11i v1] |
|
Der Befehl libc wurde nach der C99 Spezifikation (ISO/IEC 9899:1999) und der Unix98 Spezifikation um eine neue Gruppe von Multibyte-APIs erweitert. Diese APIs erweitern die bereits vorhandenen Multibyte- und Breitzeichen-APIs um folgende Möglichkeiten:
Die folgenden neuen Designkonzepte wurden eingeführt:
Ein Datenstrom kann auf Breitzeichen oder Multibyte-Zeichen ausgerichtet sein. Bei der Ausrichtung eines Datenstroms handelt es sich um ein Konzept, das auf einem Ein-/Ausgabemodell basiert, bei dem Folgendes vorausgesetzt wird: Zeichen werden innerhalb einer Anwendung als Breitzeichen gehandhabt und in Dateien als Multibyte-Zeichen gespeichert. Dabei beginnt die Ausführung aller Ein-/Ausgabefunktionen für Breitzeichen mit dem Datenstrom, der an der Grenze zwischen zwei Multibyte-Zeichen positioniert ist. Wenn ein Datenstrom bereits einer Datei zugeordnet ist, aber noch keine Operationen für den Datenstrom ausgeführt wurden, ist der Datenstrom noch ohne Ausrichtung. Wenn eine Ein-/Ausgabefunktion für Breitzeichen auf einen Datenstrom ohne Ausrichtung angewendet wird, erhält der Datenstrom implizit eine Breitzeichenausrichtung. Wenn eine Ein-/Ausgabefunktion für Multibyte-Zeichen auf einen Datenstrom ohne Ausrichtung angewendet wird, erhält der Datenstrom in derselben Weise implizit eine Multibyte-Ausrichtung. Nach Ausrichtung des Datenstroms ist diese Ausrichtung fest definiert. Sie lässt sich erst nach Schließen des Datenstroms ändern. Es wurde ein neuer Satz von APIs eingeführt, die die Konvertierung zwischen der Darstellung anhand von Multibyte-Zeichen und der Darstellung anhand von Breitzeichen vereinfachen. Diese APIs verwenden einen neuen Objekttyp, mbstate_t, der die Informationen zum Konvertierungsstatus speichern kann. Diese Informationen sind erforderlich, um Konvertierungen zwischen Multibyte-Zeichenfolgen und Breitzeichenfolgen auszuführen. Der Konvertierungsstatus legt die Funktionsweise der Konvertierungen zwischen Multibyte- und Breitzeichencodierungen fest. Bei einer Konvertierung von Multibyte-Zeichen in Breitzeichen wird vom Konvertierungsstatus u. a. die Position innerhalb des aktuellen Multibyte-Zeichens (als Folge von Zeichen oder als Breitzeichensummenfeld) gespeichert. Bei Konvertierungen in beiden Richtungen werden im Konvertierungsstatus der aktuelle Shift-Status (sofern vorhanden) und, falls möglich, die Codierungsregel gespeichert. Da diese APIs die Teilzeichendaten speichern, kann eine Multibyte-Folge Byte für Byte verarbeitet werden. Die Verarbeitung lässt sich dabei jederzeit unterbrechen oder fortsetzen (neu starten). Die neuen Dienstprogramme zur Konvertierung von Multibyte-/Breitzeichen können erneut gestartet werden, da sie die Daten im Objekt mbstate_t verwenden. Für die MSE/Unix98 Funktionsweise müssen die Programme mit Hilfe der Makrodefinition -D_XOPEN_SOURCE=500 kompiliert werden. Dabei muss die Variable UNIX_STD in der Umgebung festgelegt werden. In den Korn-, Bourne- und POSIX-Shells wird dies auf folgende Weise erreicht:
In der C-Shell wird dies mit folgendem Befehl erreicht:
Für diese Funktionalität ist ein cc-Compiler erforderlich, der den Leistungsumfang des HP92453-01 A.11.01.20 HP C-Compilers oder eines neueren Compilers bietet. Die folgende Liste enthält eine Zusammenfassung der neuen und geänderten APIs. Weitere Einzelheiten finden Sie auf den zugehörigen Hilfeseiten. Die folgenden APIs wurden neu zu libc hinzugefügt und haben keine Auswirkungen auf den vorhandenen Code: mbrlen() gibt die Anzahl der Bytes in einem Breitzeichen zurück. Die Kategorie LC_CTYPE der aktuellen Sprachumgebung wirkt sich auf die Funktionsweise dieser Funktion aus. mbrtowc() konvertiert einen Bytedatenstrom in Breitzeichencode. Die Kategorie LC_CTYPE der aktuellen Sprachumgebung wirkt sich auf die Funktionsweise dieser Funktion aus. mbsinit() legt fest, ob das Objekt, auf das durch das erste Argument mit den Daten zum Shift-Status verwiesen wird, den anfänglichen Konvertierungsstatus beschreibt. mbsrtowcs() konvertiert eine Zeichenfolge in eine Breitzeichenfolge. Die Kategorie LC_CTYPE der aktuellen Sprachumgebung wirkt sich auf die Funktionsweise dieser Funktion aus. towctrans() wird zwecks Zeichentranskription bereitgestellt. Die aktuelle Einstellung für die Kategorie LC_CTYPE muss mit der Einstellung beim Aufrufen von wctrans() übereinstimmen. Diese APIs werden zur Verfügung gestellt, um mit Breitzeichen formatierte Ausgaben des Arguments stdarg zu drucken. Sie entsprechen fwprintf(3C) mit Ausnahme davon, dass sie mit Hilfe einer über stdarg.h definierten Argumentliste und nicht mit Hilfe einer variablen Anzahl von Argumenten aufgerufen werden. wcrtomb() konvertiert ein Breitzeichen in ein Multibyte-Zeichen. Dabei wird die Anzahl an Bytes bestimmt, die zur Darstellung des Zeichens gemäß dem Breitzeichencode erforderlich sind, der durch das zweite Argument angegeben wird. wcsrtombs() konvertiert eine Breitzeichenfolge in eine Zeichenfolge. Die Kategorie LC_CTYPE der aktuellen Sprachumgebung wirkt sich auf die Funktionsweise dieser Funktion aus. wcsstr() sucht eine Teilzeichenfolge in einer Breitzeichenfolge. Die Kategorie LC_CTYPE der aktuellen Sprachumgebung wirkt sich auf die Funktionsweise dieser Funktion aus. wctrans() definiert die Zeichenzuordnung in der aktuellen Sprachumgebung. Dabei sind alle von wctrans() zurückgegebenen Zeichen gültig, bis ein Aufruf von setlocale() erfolgt, der die Kategorie LC_CTYPE ändert. Diese APIs funktionieren mit Breitzeichen in Speicherbereichen:
Bei den folgenden APIs wurde möglicherweise die Funktionsweise oder ein Parametertyp geändert. Dies könnte sich auf den vorhandenen HP-UX Code auswirken, wenn Unix98 Unterstützung ausgewählt wird. printf(3C), scanf(3C) und zugehörige Funktionen unterstützen den neuen Qualifikator 1 (den Buchstaben), um die Breitzeichenkonvertierung in eine vorgegebene Formatzeichenfolge auszuwählen und den Wert für errno auf EILSEQ festzulegen, wenn die Daten aus dem eingehenden Datenstrom kein gültiges Breitzeichen bilden. |
||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||