Unicode ist ein genormter alphanumerischer Zeichensatz und fasst alle weltweit bekannten Textzeichen in einem einzigen Zeichensatz zusammen. PERCON bietet die Möglichkeit, ganze Sätze oder Teile von Sätzen (siehe Anweisung "SET-RECORD-MAPPING Festlegen des Ausgabesatzaufbaus"), die nicht in Unicode codiert sind, in ein Unicode-Format umzusetzen und umgekehrt. Dazu muss der Eingabedatei und/oder der Ausgabedatei ein Unicode-Format zugeordnet sein. Eingabe- und Ausgabedatei müssen dabei SAM-Dateien sein. Bei anderen Zugriffsmethoden (ISAM, BTAM oder PAM) wird die Meldung PER0115 ausgegeben und die Konvertierung abgebrochen. Konvertiert wird automatisch immer dann, wenn der Eingabe- und der Ausgabedatei unterschiedliche Coded Character Set Names (CCSN) zugeordnet sind. Voraussetzung für eine Konvertierung ist, dass die unterschiedlichen CCSN kompatibel zueinander sind.
Hinweis
Bei einer Ausgabedatei mit CCSN UTF-16 wird zu Beginn der Konvertierung geprüft, ob die Länge des Ausgabefeldes geradzahlig ist. Ist die Länge des Ausgabefeldes nicht geradzahlig, wird die Konvertierung mit der Meldung PER0116 abgebrochen.
Da Unicode-Daten in nicht-normalisierter Form vorliegen können, bietet PERCON darüber hinaus die Möglichkeit diese Daten zu normalisieren, d.h. in die zusammengesetzte Zeichendarstellung umzuwandeln, siehe auch Kapitel „Normalisierung“.
In PERCON können als Eingabe- oder Ausgabedateien mit Unicode-CCS nur Dateien auf Platte bzw. Band (katalogisierte Dateien) verwendet werden. Eingabedateien auf SYSDTA und Ausgabedateien auf SYSOUT oder SYSLST werden mit der Fehlermeldung PER0112 zurückgewiesen. Bei Ausgabedateien mit Unicode-CCSN können die Anweisungen SET-GROUP-ATTRIBUTES und SET-PAGE-LAYOUT nicht verwendet werden. Sie werden mit der Fehlermeldung PER0118 abgewiesen.
PERCON unterstützt die von XHCS (siehe Handbuch [2] "XHCS") angebotenen Unicode-Varianten UTF-16, UTF-8 und UTFE (siehe Handbuch [14] "Unicode im BS2000/OSD").
Umwandlung von Dateien
Bei der Konvertierung von einem Nicht-Unicode-Format in ein Unicode-Format oder umgekehrt, kann sich die Satzlänge ändern.
Bei Sätzen variabler Länge wird die Länge des Ausgabesatzes automatisch angepasst (gespreizt oder verkürzt). Das kann von Satz zu Satz unterschiedlich sein. Der Anwender kann für die Ausgabedatei eine maximale Satzlänge angeben. Bei Überschreitung dieser Länge wird einmalig die Warnung PER0009 ausgegeben und die Ausgabesätze werden auf der rechten Seite abgeschnitten und weiterverarbeitet.
Bei Sätzen fester Länge hat der Anwender folgende Möglichkeiten, um die Satzlänge anzupassen:
Dem Ausgabesatz wird eine variable Satzlänge zugeordnet (RECORD-FORMAT=*VARIABLE(...) im ADD-FILE-LINK-Kommando). Der Anwender kann dann “von außen“ eine maximale Satzlänge angeben. Bei Überschreitung dieser Länge wird einmalig die Warnung PER0009 ausgegeben und der Ausgabesatz wird auf der rechten Seite abgeschnitten und weiterverarbeitet.
Bei RECORD-SIZE=0 wird der in der Tabelle im Kapitel "Dateimerkmale" angegebene Maximalwert für die Ausgabesatzlänge angenommen. Dieser Wert ist in der Regel groß genug, um den konvertierten Satz vollständig aufzunehmen.Dem Ausgabesatz wird eine feste Satzlänge zugeordnet (RECORD-FORMAT=*FIXED(...) im ADD-FILE-LINK-Kommando). Die Länge wird vom Anwender festgelegt. Ist das Ausgabefeld zu lang, werden unbenutzte Bytes bei einer Konvertierung in ein Unicode-Format mit dem Unicode-Füllzeichen aufgefüllt. Bei einer Konvertierung in ein Nicht-Unicode-Format wird mit dem Füllzeichen im Code des Ausgabesatzes aufgefüllt. Der Standardwert ist in beiden Fällen das Leerzeichen. Ist die Länge des Ausgabesatzes zu kurz für die Konvertierung, wird einmalig eine Warnung PER0009 ausgegeben und der Ausgabesatz wird auf der rechten Seite abgeschnitten und weiterverarbeitet.
Bei einer Ausgabe im Unicode-Format kann der Anwender als Unicode-Füllzeichen das Leerzeichen oder das Zeichen *NIL verwenden (siehe UNICODE-FILLER in der ASSIGN-OUTPUT-FILE-Anweisung). Für eine eventuelle nachfolgende Sortierung wird jedoch dringend empfohlen mit Leerzeichen aufzufüllen, da das Zeichen *NIL von SORT ignoriert wird.
Hinweis
Bei der Satzauswahl mit SELECT-INPUT-RECORDS können Zeichen im Unicode-Format nicht als Auswahlkriterium angegeben werden. Für die Vergleichsoperatoren gleich oder ungleich kann die Hexadezimalverschlüsselung des Unicodezeichens verwendet werden. Die Vergleichsoperatoren größer oder kleiner können jedoch nicht sinnvoll eingesetzt werden, da sie sich immer auf die hexadezimale Verschlüsselung der Zeichen beziehen. Sie dürfen nicht mit der tatsächlichen Sortierreihenfolge der Zeichen verwechselt werden.
Umwandlung von Teilen von Sätzen
Mit Hilfe der PERCON-Anweisung SET-RECORD-MAPPING ist es möglich, einzelne Bereiche eines Satzes zu konvertieren und/oder, falls die Unicode-Variante UTF-16 verwendet wird, zu normalisieren. Dazu muss in der SET-RECORD-MAPPING-Anweisung dem Operanden OUTPUT-FORMAT der Wert *UNICODE-TRANSLATION zugewiesen werden. Fehlt diese Angabe, findet keine Konvertierung bzw. Normalisierung des betroffenen Bereichs statt.
Bei der Konvertierung von einem Nicht-Unicode-Format in ein Unicode-Format oder umgekehrt, kann sich die Länge des auszugebenden Bereichs ändern. Diese Längenänderung muss bei der Angabe der Länge des Ausgabefeldes (OUTPUT-LENGTH) beachtet werden. Ist das Ausgabefeld zu lang, so wird das Feld bei einer Konvertierung in ein Unicode-Format mit dem Unicode-Füllzeichen aufgefüllt. Bei einer Konvertierung in ein Nicht-Unicode-Format wird mit dem Füllzeichen im Code des Ausgabesatzes aufgefüllt. Der Standardwert ist in beiden Fällen das Leerzeichen. Ist das Ausgabefeld zu kurz, wird einmalig die Warnung PER0113 ausgegeben und das Feld auf der rechten Seite abgeschnitten und weiterverarbeitet.