UTF-EBCDIC

UTF-EBCDIC ist ein Zeichenkodierung In der Lage, alle 1.112.064 gültigen Zeichen zu codieren Codepunkte in Unicode Verwenden Sie eins bis fünf ein.Byte (8-Bit-) Codeeinheiten (im Gegensatz zu maximal vier für UTF-8).[1] So soll es sein Ebcdic-freundlich, so dass ältere ebcdische Anwendungen auf Mainframes kann die Charaktere ohne große Schwierigkeiten verarbeiten. Die Vorteile für bestehende EBCDIC-basierte Systeme sind ähnlich wie UTF-8Die Vorteile für bestehende ASCII-basierte Systeme. Details zu UTF-EBCDIC sind im technischen Bericht Nr. 16 von Unicode definiert.

Um die UTF-EBCDIC-codierte Version einer Reihe von Unicode-Codepunkten zu produzieren, wird zuerst eine Codierung von UTF-8 (in der Spezifikation als UTF-8-mod bekannt) angewendet (erstellen, was die Spezifikation als i8-Sequenz nennt). Der Hauptunterschied zwischen dieser Codierung und UTF-8 besteht darin, dass Unicode-Codepunkte U+0080 über U+009f (die C1 -Kontrollcodes) als einzelnes Byte dargestellt und daher später entsprechenden Ebcdic -Kontrollcodes zugeordnet werden. Um dies zu erreichen, verwendet UTF-8-MOD 101xxxxx anstelle von 10xxxxxx als Format für nachverfolgende Bytes in einer Multi-Byte-Sequenz. Da dies nur 5 Bit anstelle von 6 aufnehmen kann, ist die UTF-8-Mod-Codierung von CodePoints über U+03ff größer als die UTF-8-Codierung.

Die UTF-8-MOD-Transformation lässt die Daten in einem ASCII-basierten Format (z. B. U+0041 "A" wird immer noch als 01000001 codiert) Um die endgültige UTF-EBCDIC-Codierung zu erzeugen. Zum Beispiel 01000001 karten in dieser Tabelle auf 11000001; Somit ist die UTF-EBCDIC-Codierung von U+0041 (Unicode's "A") 0xC1 (Ebcdics "A").

Diese codierende Form wird selten verwendet, selbst auf den EBCDIC-basierten Mainframes, für die sie entworfen wurde. IBM EBCDIC-basierte Mainframe-Betriebssysteme wie z. Z/OS, normalerweise verwenden UTF-16 Für den vollständigen Unicode -Unterstützung. Zum Beispiel, IBM DB2, Cobol, Pl/i, Java und die IBM Xml Toolkit unterstützen UTF-16 auf IBM Mainframes.

Codepage -Layout

Es gibt 160 Zeichen mit Single-Byte-Codierungen in UTF-EBCDIC (im Vergleich zu 128 in UTF-8). Wie zu sehen ist, ähnelt der Single-Byte-Teil IBM-1047 anstelle von IBM-37 Aufgrund der Lage der Quadratklammern. Ccsid 37 hat [] bei Hex Ba und BB anstelle von Hex AD bzw. BD.

UTF-EBCDIC
0 1 2 3 4 5 6 7 8 9 EIN B C D E F
0x Nul Soh Stx ETX St Ht SSA Del EPA Ri SS2 Vt Ff Cr ALSO Si
1x Dle DC1 DC2 DC3 OSC Lf BS ESA KANN Em PU2 SS3 Fs Gs Rs UNS
2x PAD Hüpfen BPH NBH Ind Nel ETB ESC HTS Htj VTS PLD Plu Enq Ack Bel
3x DCS PU1 Syn Sts CCH MW SPA Eot SOS SGCI Sci CSI DC4 Nak PM Sub
4x  Sp  . < ( + |
5x & ! $ * ) ; ^
6x - / , % _ > ?
7x 2 2 2 2 2 ` : # @ ' = "
8x 2 a b c d e f g h i 2 2 2 2 2 2
9x 2 j k l m n o p q r 2 2 2 2 2 2
Axt 2 ~ s t u v w x y z 2 2 2 [ 2 2
BX 2 2 2 2 2 2 2 3 3 3 3 3 3 ] 3 3
CX { A B C D E F G H I 3 3 3 3 3 3
Dx } J K L M N O P Q R 3 3 4 4 4 4
Ex \ 4 S T U V W X Y Z 4 4 4 5 5
Fx 0 1 2 3 4 5 6 7 8 9 APC
 Starten Sie Bytes für eine Sequenz dieser vielen Bytes. Tooltip zeigt den niedrigsten Codepunkt an, der mit diesem Start -Byte codiert ist.
 Starten Sie BYTE, wo nicht alle Kombinationen von Fortsetzung Bytes gültig sind, entweder weil es sich um ein ungültiges überwegiges Formular handelt (der Tooltip zeigt den Codepunkt der ersten gültigen Sequenz) oder weil es einen Codepunkt, der größer als U+10ffff ist, codiert.
 Fortsetzung Bytes. Tooltip zeigt den hexadezimalen Wert der 5 Bits, die sie hinzufügen.
 Unbenutzt, einschließlich Lead -Bytes, die nur ein ungültiges überwegiges Formular starten können. Zum Beispiel wäre 0x76, weil sogar 0x76 0x73 (was der UTF-8-MOD-Sequenz 0xC2 0xBF kartiert) lediglich eine überlange Codierung von U+005F (ordnungsgemäß als UTF-8-mod 0x5f, UTF-EBCDIC 0x6d).

Oracle Utfe

Oracle Utfe ist ein Unicode 3.0 UTF-8 Oracle -Datenbank Variation, ähnlich wie die CESU-8 Variante von UTF-8, wobei ergänzende Zeichen eher als zwei 4-Byte-Zeichen als als einzelner 4- oder 5-Byte-Zeichen codiert werden. Es wird nur auf EBCDIC -Plattformen verwendet.[2]

Vorteile:

  • Nur Unicode -Zeichen für EBCDIC.
  • Die Länge der SQL -Zeichentypen kann in Anzahl der Zeichen angegeben werden.
  • Die binäre Reihenfolge der SQL -Zeichenspalten entspricht der binären Reihenfolge der SQL NCHAR -Spalten, wenn die Daten aus den gleichen ergänzenden Zeichen bestehen. Folglich sortieren diese Spalten für identische Zeichenfolgen gleich.[2]

Nachteile:

  • Ergänzende Zeichen belegen nur sechs Bytes anstelle von vier Bytes. Folglich müssen ergänzende Zeichen konvertiert werden.
  • UTFE ist keine Unicode -Standardcodierung. Clients, die UTF-8-Codierung benötigen, müssen Daten zum Abrufen und Speicher konvertieren.[2]

MKSH NEGA-UTF-8

Mksh ist eine POSIX-Shell mit einem „UTF8-Modus“, der die Portion zu EBCDIC kompliziert. Anstatt UTF-EBCDIC zu implementieren (was von niemandem verwendet wird), fanden es den Entwicklern einfacher, nur normale UTF-8 zu verwenden und es in Ebcdic zu konvertieren, indem sie so tun, als sei es die "erweiterte ASCII" -Kodierung für die aktuelle Code-Seite. Dies zerstört die eBCDIC -Kontrollzeichen, die jedoch nicht in ASCII zu finden sind.[3]

Siehe auch

Verweise

  1. ^ "UTR #16: UTF-EBCDIC". www.unicode.org. Abgerufen 2021-02-23. Sie müssen in höchstens fünf Bytes suchen (sieben Bytes, wenn der gesamte Bereich von 31 Bit ISO/IEC 10646 nach hinten berücksichtigt wird)
  2. ^ a b c Baird, Cathy; Chiba, Dan; Chu, Winson; Fan, Jessica; Ho, Claire; Gesetz, Simon; Lee, Geoff; Linsley, Peter; Matsuda, Keni; Oscroft, Tamzin; Takeda, Shige; Tanaka, Linus; Tozawa, Makoto; Trute, Barry; Tsujimoto, Mayumi; Wu, Ying; Yau, Michael; Yu, tim; Wang, Chao; Wong, Simon; Zhang, Weiran; Zheng, Lei; Zhu, Yan; Moore, Valarie (2002) [1996]. "Anhang A: Gebietsschemasdaten". Oracle9i -Datenbank Globalisierung Support Guide (PDF) (Release 2 (9.2) ed.). Oracle Corporation. Oracle A96529-01. Archiviert (PDF) vom Original am 2017-02-14. Abgerufen 2017-02-14.
  3. ^ "Mirbsd/Mksh". GitHub. 4. November 2021. EBCDIC interagiert auf besondere Weise mit UTF8-Mode: UTF-EBCDIC wird von niemandem verwendet, wir können UCS-2/4 in der Shell nicht verwenden Erledigt auf den Oktetten, die gemäß dem aktuellen Ebcdic -Codepage in "erweiterte ASCII" umgewandelt wurden.

Externe Links