UTF-1 war das erste UCS Transformation Format für Unicode und ISO 10646 und wurde 1993 im Anhang G der ursprünglichen Version von ISO 10646 veröffentlicht, ist jedoch heute nicht mehr Teil dieser Norm. UTF-1 ist kompatibel zu ISO 2022.

ASCII-Zeichen, C0- und C1-Steuerzeichen werden wie in ISO 8859 unverändert (1:1) kodiert. Andere Zeichen werden – über eine relativ rechenaufwändige Modulo-190-Arithmetik – als Zeichenfolgen von 2, 3 oder 5 Byte Länge kodiert. Dabei können auch ASCII-Zeichen Teil dieser Zeichenfolgen sein. Das hat den Nachteil, dass zum Beispiel der Schrägstrich in so einer Zeichenfolge enthalten sein kann, so dass diese Kodierung nicht für Dateinamen verwendet werden kann.

Aufgrund dieses Nachteils wurde später eine andere Kodierung für Unicode entwickelt, welche anfangs „UTF-FSS“ (file system safe) genannt wurde und sich heute unter dem Namen UTF-8 allgemein durchgesetzt hat.

Kodierung

UTF-1: Kodierungsbereiche
Codebereich (hex)KodierungAnmerkungen
0 … 9F0 … 9Fhex1:1-Kodierung von ASCII und C0- und C1-Steuerzeichen
A0 … FFA0 xx ist das ursprüngliche Oktett
100 … 4015A1…F5 p2-Byte-Sequenz
4016 … 38E2DF6…FB p q3-Byte-Sequenz
 38E2EFC…FF p q r s5-Byte-Sequenz

Für die Erzeugung der Zeichenfolgen wird der Zeichencode als Zahl zur Basis 190 dargestellt und die „Ziffern“ dieser Darstellung über eine spezielle Lookup-Funktion so in Bytes umgerechnet, dass nur Bytes aus dem Bereich 21hex … 7Ehex und A0hex…FFhex entstehen, um Kompatibilität zu ISO 2022 zu erreichen:

UTF-1: Funktion T(x)
x T(x) Bemerkungen
FormelErgebnis
00  5Dx + 2121 … 7E Nur diese Werte treten bei der Modulo-190-Berechnung auf.
5E … BDx + 42A0 … FF
BE … DEx − BE00 … 20 Nur zur Vollständigkeit.
Diese Werte können bei der Modulo-190-Arithmetik nicht auftreten.
DF … FFx − 607F … 9F

Die Werte der einzelnen Bytes der Zeichenfolge ergeben sich anhand der folgenden Tabelle. Die Modulo-Operatopn wird mit % gekennzeichnet, die Division ist eine Ganzzahldivision ohne Rest. Alle Zahlen sind Hexadezimalzahlen.

UTF-1: Berechnung der Zeichenfolgen
x (hex)HilfsvariableZeichenfolge
0 … 9F  x
A0 … FF  A0  x
100 … 4015y = x − 100 A1+y/BE  T(y%BE)
4016 … 38E2Dy = x − 4016 F6+y/BE2  T((y/BE)%BE)  T(y%BE)
 38E2Ey = x − 38E2E FC+y/BE4  T((y/BE3)%BE)  T((y/BE2)%BE)  T((y/BE)%BE)  T(y%BE)

Kodierungsbeispiele

In der nachfolgenden Tabelle wird die Kodierung einiger Unicode-Zeichen in UTF-8 und UTF-1 gezeigt.

Hinweis: Inzwischen wurde UCS und Unicode auf den Bereich bis max. U+10FFFF begrenzt. Als UTF-1 und UTF-8 entwickelt wurden, existierte diese Begrenzung noch nicht.

CodepointUTF-8UTF-1Anmerkungen
U+007F7F7F
U+0080C2 8080
U+009FC2 9F9F
U+00A0C2 A0A0 A0
U+00BFC2 BFA0 BF
U+00C0C3 80A0 C0
U+00FFC3 BFA0 FF
U+0100C4 80A1 21 Das 2. Oktett bei UTF-1 liegt im Bereich von ASCII-Codes.
U+015DC5 9DA1 7E
U+015EC5 9EA1 A0
U+01BDC6 BDA1 FF
U+01BEC6 BEA2 21
U+07FFDF BFAA 72größter Codepoint, den UTF-8 in 2 Bytes kodieren kann
U+0800E0 A0 80AA 73
U+0FFFE0 BF BFB5 48
U+1000E1 80 80B5 49
U+4015E4 80 95F5 FF größter Codepoint, den UTF-1 in 2 Bytes kodieren kann
U+4016E4 80 96F6 21 21
U+FFFFEF BF BFF7 65 AF
U+10000F0 90 80 80F7 65 B0
U+38E2DF0 B8 B8 ADFB FF FFgrößter Codepoint, den UTF-1 in 3 Bytes kodieren kann
U+38E2EF0 B8 B8 AEFC 21 21 21 21 ab hier benötigt UTF-1 5 Bytes und ist somit ineffizienter als UTF-8
U+FFFFFF3 BF BF BFFC 21 37 B2 7A
U+100000F4 80 80 80FC 21 37 B2 7B
U+10FFFFF4 8F BF BFFC 21 39 6E 6CGrößter Codepoint, der heute in Unicode erlaubt ist
U+7FFFFFFFFD BF BF BF BF BFFD BD 2B B9 40

Einzelnachweise

  1. kikaku.itscj.ipsj.or.jp (Memento vom 18. März 2015 im Internet Archive)
This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.