Folgende Themen werden behandelt:
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.
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.