- UNICODE: Allgemeines -
Was ist UNICODE?
Unicode ist ein internationaler Standard, in dem langfristig für jedes sinntragende Zeichen bzw. Textelement aller bekannten Schriftkulturen und Zeichensysteme ein digitaler Code festgelegt wird. Ziel ist es, das Problem unterschiedlicher, inkompatibler Codierungen in unterschiedlichen Ländern oder Kulturkreisen zu beseitigen. Herkömmliche Computer-Zeichencodes umfassen einen Zeichenvorrat von entweder 128 (7 Bit) Codepositionen wie der sehr bekannte ASCII-Standard oder 256 (8 Bit) Positionen, wie z. B. ISO 8859-1 (auch als Latin-1 bekannt), wovon nach Abzug der Steuerzeichen 96 Elemente bei ASCII und 192–224 Elemente bei den 8-Bit ISO-Zeichensätzen als Schrift- und Sonderzeichen darstellbar sind. Diese Zeichencodierungen erlauben die gleichzeitige Darstellung nur weniger Sprachen im selben Text.
In Unicode finden Zeichen der wichtigsten ISO-Zeichensätze wie die ISO-Normen der Serie 8859 eine 1:1-Entsprechung (das bedeutet, dass bei einer Konvertierung von ISO zu Unicode und zurück das gleiche Ergebnis herauskommt, mit Ausnahme des EURO-Zeichens, ISO8859-1 = X'80', UNICODE = U'20AC').
ISO 10646 ist die von ISO verwendete praktisch bedeutungsgleiche Bezeichnung des Unicode-Zeichensatzes; er wird dort als Universal Character Set (UCS) bezeichnet.
Die Speicherung und Übertragung von Unicode erfolgt in unterschiedlichen Formaten ("Encodings„):
UTF-8 UTF-8 (Abk. für 8-Bit Unicode Transformation Format) ist die am weitesten verbreitete Codierung für Unicode-Zeichen. Dabei wird jedem Unicode-Zeichen eine speziell codierte Bytekette von variabler Länge zugeordnet. UTF-8 unterstützt bis zu vier Byte, auf die sich wie bei allen UTF-Formaten alle 1.114.112 Unicode-Zeichen abbilden lassen. Das UTF-8-Header enthält X'EFBBBF'
UTF-16 UTF-16 (Abk. für 16-bit Unicode Transformation Format) ist eine Codierung. bei der jedes Unicode-Zeichen mind. 16 Bit belegt. Unicode-Zeichen außerhalb der BMP (Basic multilingual plane, d.h. U+10000 bis U+10FFFF), werden durch zwei 16-Bit-Wörter (engl. code units) dargestellt, die wie folgt gebildet werden:
Von der Nummer des Zeichens wird 65536 (10000hex) abgezogen. So können mehr Zeichen kodiert werden. Danach wird das Ergebnis in zwei Blöcke zu je 10 Bit zerteilt. Dem ersten Block wird die Bitfolge 110110 und dem zweiten Block wird die Bitfolge 110111 vorangestellt. Das erste der so entstandenen 16-Bit-Wörter bezeichnet man als High-Surrogate, das zweite als Low-Surrogate. Diesen Namen entsprechend enthält das High-Surrogate die höherwertigen, das Low-Surrogate die niederwertigen Bits des Unicode-Zeichens. Der Codebereich von U+D800 bis U+DBFF (High-Surrogates) und der Bereich von U+DC00 bis U+DFFF (Low-Surrogates) ist für diese UTF-16-Ersatzzeichen reserviert und enthält keine eigenständigen Zeichen.
Von UTF-16 gibt es zwei Varianten:
a) UTF-16BE (Big-Endian), im Folgenden als UCB bezeichnet:
Das höherwertige Byte steht in den ersten 8 Bits, z.B. Die Zahl "0" (X'30') erhält den Wert X'0030'. Der UTF-16-Header enthält X'FEFF'.
b) UTF-16LE (Little-Endian), im Folgenden als UCL bezeichnet:
Das niederwertige Byte steht in den ersten 8 Bits, z.B. Die Zahl "0" (X'30') erhält den Wert X'3000'. Der UTF-16-Header enthält X'FFFE'
sonstige SCSU (Standard Compression Scheme for Unicode, früher auch als RCSU – Reuters' Compression Scheme for Unicode – bezeichnet), UTF-EBCDIC, Punycode (Domainnamen, IDNA) BOCU (Binary-Ordered Compression for Unicode) CESU-8 und GB18030 werden nicht unterstützt.
Unterstützung von UNICODE-Dateien ab der Version 4.0
Die Daten der Arbeitsbereiche werden intern als Zwei-Byte-Zeichen gespeichert und zwar im Format Big-Endian (höherwertiges Byte zuerst).
UNICODE-Dateien im Format UTF-8 und UTF-16 Little-Endian (niederwertiges Byte zuerst) werden beim Lesen in das Format UTF-16 Unicode Big-Endian (höherwertiges Byte zuerst) umgewandelt.
Dateien, die in einem Ein-Byte-Code codiert sind, wie ISO8859-1 (ANSI), EBCDIC oder ASCII, werden beim Lesen nicht umcodiert, sondern linksbündig um X'00' ergänzt und im Ursprungscode gespeichert und editiert.
Daten in Stringvariablen und in der Zwischenablage werden immer in UNICODE codiert und bei Verwendung in Arbeitsbereichen in den Zielcode übersetzt. Beim Kopieren und Verschieben von Daten aus UNICODE-Arbeitsbereichen in andere Arbeitsbereiche und umgekehrt wird ggf. eine Umcodierung vorgenommen.
Erweiterungen für die Verarbeitung von UNICODE-Dateien
Folgende Kommandos und Menü-Funktionen wurden für die Verarbeitung von UNICODE-Dateien erweitert:
a) Neue Optionen zum Kommando READ und WRITE:
CHAR: Datei im 1-Byte-Format (Standard, falls kein UNICODE-Header)
UTF:  Datei im UTF-8-Format
UCB:  UTF-16 Unicode Big-Endian (höherwertiges Byte zuerst)
UCL:  UTF-16 Unicode Little-Endian (niederwertiges Byte zuerst)
H:    Beim Schreiben Header voranstellen (Standard)
NH:   Datei ohne Header schreiben
Falls einzulesende Dateien einen UNICODE-Header (Byte Order Mark) enthalten, wird automatisch die richtige Codierung verwendet. Das Gleiche gilt, falls in der Datei das UNICODE-Satzende-Kennzeichen X'000D000A' bzw. X'0D000A00' oder ein XML-Header mit UTF-Encoding vorkommt.
b) In allen Kommandos, bei denen Zeichenfolgen erlaubt sind, kann auch der Zeichenfolge-Typ U'1234' für Unicode-Strings verwendet werden. Dabei werden für jedes UNICODE-Zeichen 4 Halbbytes angegeben, z.B. U'20AC' für das Zeichen '€'. Diese Art von Zeichenfolge darf nur in einem UNICODE-Arbeitsbereich verwendet werden.
c) Kommando CODE, Menü Funktionen / Code-Umsetzung, Menü Ansicht / Anzeige-Code und Menü Optionen / Code-Darstellung für neue Arbeitsbereiche: Als Anzeige-Code bzw. Ziel- oder Sendecode kann auch UNICODE angegeben werden.
c) Menü Optionen / Code/Shell / Dateien ohne UNICODE-Header: Wahlweise kann eine automatische Erkennung für UTF8-Dateien eingeschaltet werden.
d) Das Kommando HEX wurde um die Optionen "2" (2-zeilig) und "4" (4-zeilig) erweitert. Das Kommando HEX 4 ist aber nur in einem UNICODE-Arbeitsbereich zulässig.
e) Kommando COMPARE: Arbeitsbereiche für das Compare-Protokoll und der Protokoll-Arbeitsbereich 32 werden automatisch in Unicode-Codierung angezeigt, falls Daten in Unicode-Codierung enthalten sind.
f) Kommando VAR LOAD kann alte und neue (UNICODE) Dateien zum Laden von String-Variablen verarbeiten.
g) Mit dem Menü Funktionen / Einfügen Sonderzeichen... können alle zulässigen Zeichen eines Zeichensatzes in das Datenfenster oder in die Kommandozeile eingefügt werden.