Einführung

Folgende Themen werden behandelt:


Allgemeines zu Codepages und Unicode

Eine herkömmliche Zeichensatztabelle (im Folgenden "Codepage" genannt) besteht aus einer Liste mit ausgewählten Zeichencodes, die in einer festgelegten Reihenfolge angeordnet sind und bestimmte Sprachen oder Gruppen von Sprachen unterstützen, die gemeinsame Schriftzeichen haben. Eine Codepage kann maximal 256 Zeichencodes haben. Bei Zeichensätzen, die mehr als 256 Zeichen enthalten (z.B. Chinesisch oder Japanisch) kommt ein Double-Byte Character Set (DBCS) zur Anwendung: DBCS-Codepages sind faktisch mehrere Bytes umfassende Zeichenkodierungen ("Encodings""), eine Mischung aus 1-Byte- und 2-Byte-Codepunkten ("Codepoints").

Codepages haben den inhärenten Nachteil, dass sie nicht verwendet werden können, um verschiedene Sprachen im selben Datenstrom zu speichern. Unicode wurde entworfen, um diese Einschränkung zu beseitigen. In Unicode wird eine Standard-Zeichencodierung für alle Zeichensätze zur Verfügung gestellt, die unabhängig von der Plattform, dem Programm oder der Sprache ist, die für den Datenzugriff benutzt wird. In Unicode steht für jedes Zeichen eine eindeutige Zahl zur Verfügung.

Jedem durch den Unicode-Standard definierten Code-Element wird ein Zahlenwert im Coderaum zugewiesen. Dieser Zahlenwert wird als "Codepoint" bezeichnet. Bei Bezugnahme im Text wird der Codepoint in hexadezimaler Form mit einem vorangestellten U aufgeführt. Beispiel: Der Codepoint "U+0041" ist die Hexadezimalzahl "0041" (äquivalent zur Dezimalzahl "65"). Er repräsentiert das große "A" im Unicode-Standard und trägt den Namen "LATIN CAPITAL LETTER A".

Der Unicode-Standard definiert drei Zeichencodierungsformen, mit denen die gleichen Daten in einem Byte-, Wort- oder Doppelwort-orientierten Format übertragen werden können. Eine Codeeinheit ("Code Unit") ist die geringste Bit-Kombination, mit der ein Zeichen in einer spezifischen Zeichenkodierung dargestellt werden kann. Der Unicode-Standard verwendet 8-Bit-Codeeinheiten in der Encoding Form (Abbildung der Codepoints auf Codeeinheiten) UTF-8, 16-Bit-Codeeinheiten in der Encoding Form UTF-16 und 32-Bit-Codeeinheiten in der Encoding Form UTF-32. Alle drei Zeichencodierungsformen kodieren denselben gemeinsamen Zeichenvorrat und können zügig und ohne Datenverlust ineinander umgewandelt werden.

Im Zusammenhang mit Natural haben wir es mit zwei dieser Zeichencodierungsformen zu tun: UTF-16 und UTF-8. Natural benutzt UTF-16 für das Kodieren von Unicode-Zeichenketten zur Laufzeit und UTF-8 für das Kodieren von Unicode-Daten in Dateien. UTF-16 ist eine Endian-abhängige 2-Byte-Kodierung. Das verwendete Endian-Format ist plattformabhängig. UTF-8 ist eine Zeichenkodierungen mit variabler Länge.

Eine vollständige Beschreibung des Unicodes finden Sie auf der Website des Unicode-Konsortiums unter http://www.unicode.org/.

Anmerkung:
Informationen zu Unicode-Codepoints erhalten Sie, wenn Sie die Natural Utility SYSCP benutzen.

Unicode- und Codepage-Unterstützung in Natural

Zur Unterstützung von Unicode werden das Natural-Datenformat U und spezifische Statements, Parameter und Systemvariablen benutzt. Diese werden in den folgenden Kapiteln ausführlich behandelt.

Die meisten bereits existierenden Daten liegen im Codepage-Format vor. Beim Umwandeln dieser Daten in Unicode muss die korrekte Codepage verwendet werden. Natural bietet die Möglichkeit, die korrekte Codepage auf mehreren Ebenen zu definieren:

  • System-Codepage
    Die System-Codepage wird benutzt, wenn in Natural keine Standard-Codepage definiert ist.

    Wenn keine Codepage definiert wird (CP=OFF, siehe CP - Name der Standard-Codepage), ist keine Standard-Codepage definiert. Die Parametereinstellung CP=AUTO bewirkt, dass die Natural-Session an die Codepage des aktuellen Eingabe-/Ausgabegeräts angepasst wird.

  • Standard-Codepage
    Die Standard-Codepage wird benutzt, wenn der Natural-Profilparameter CP auf einen Wert ungleich OFF gesetzt ist. Diese Einstellung hat Vorrang vor der Codepage des Betriebssystems.

  • Objekt-Codepage
    Die Objekt-Codepage, die zum Beispiel für ein Quellcode definiert wird, hat bei diesem Objekt Vorrang vor der Standard-Codepage.

Bei Verwendung von Unicode-Zeichenketten und Codepage-Zeichenketten innerhalb einer Anwendung, führt Natural eine implizite Umwandlung durch, wo immer dies nötig ist (beispielsweise beim Übertragen (MOVE) oder Vergleichen von Daten). Explizite Umwandlungen können mit dem Natural-Statement MOVE ENCODED durchgeführt werden.

In den meisten Fälle werden existierende Anwendungen, die keine Unicode-Unterstützung benötigen, unverändert laufen. Änderungen können nötig sein, wenn die existierenden Quellcodee in unterschiedlichen Codepages kodiert sind. Weitere Informationen siehe Migration existierender Anwendungen.

Es ist nicht möglich, eine existierende Anwendung laufen zu lassen und Unicode-Daten zu unterstützen, ohne Änderungen an der Anwendung vorzunehmen. In der Anwendung muss das Natural-Datenformat U eingeführt werden und wahrscheinlich reicht es nicht aus, einfach die vorhandenen Definitionen im Format A durch Definitionen im Format U zu ersetzen. Es ist unumgänglich, jeglichen Code anzupassen, in dem ein bestimmtes Speicher-Layout für Zeichenketten erwartet wird (z.B. bei einer Redifinition von alphanumerischem in numerisches Format per REDEFINE-Statement).

Die Verwendung von Unicode-Zeichen ist unzulässig innerhalb von Variablennamen, Objektnamen und Library-Namen.

Daten auf Unicode-Basis werden von Adabas und DB2 unterstützt.

Natural verwendet die International Components for Unicode (ICU) Library für die Sortierung ("Collation") und Umwandlung von Unicode-Zeichen. Weitere Informationen siehe http://userguide.icu-project.org/. Siehe auch International Components for Unicode for Software AG (ICS) weiter unten in dieser Dokumentation.