UTF-1

aus Wikipedia, der freien Enzyklopädie

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[1]
Codebereich (hex) Kodierung Anmerkungen
0 … 9F 0 … 9Fhex 1:1-Kodierung von ASCII und C0- und C1-Steuerzeichen
A0 … FF A0 x x ist das ursprüngliche Oktett
100 … 4015 A1…F5 p 2-Byte-Sequenz
4016 … 38E2D F6…FB p q 3-Byte-Sequenz
≥ 38E2E FC…FF p q r s 5-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
Formel Ergebnis
00 … 5D x + 21 21 … 7E Nur diese Werte treten bei der Modulo-190-Berechnung auf.
5E … BD x + 42 A0 … FF
BE … DE x − BE 00 … 20 Nur zur Vollständigkeit.
Diese Werte können bei der Modulo-190-Arithmetik nicht auftreten.
DF … FF x − 60 7F … 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) Hilfsvariable Zeichenfolge
0 … 9F   x
A0 … FF   A0  x
100 … 4015 y = x − 100 A1+y/BE  T(y%BE)
4016 … 38E2D y = x − 4016 F6+y/BE2  T((y/BE)%BE)  T(y%BE)
≥ 38E2E y = 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.

Codepoint UTF-8 UTF-1 Anmerkungen
U+007F 7F 7F
U+0080 C2 80 80
U+009F C2 9F 9F
U+00A0 C2 A0 A0 A0
U+00BF C2 BF A0 BF
U+00C0 C3 80 A0 C0
U+00FF C3 BF A0 FF
U+0100 C4 80 A1 21 Das 2. Oktett bei UTF-1 liegt im Bereich von ASCII-Codes.
U+015D C5 9D A1 7E
U+015E C5 9E A1 A0
U+01BD C6 BD A1 FF
U+01BE C6 BE A2 21
U+07FF DF BF AA 72 größter Codepoint, den UTF-8 in 2 Bytes kodieren kann
U+0800 E0 A0 80 AA 73
U+0FFF E0 BF BF B5 48
U+1000 E1 80 80 B5 49
U+4015 E4 80 95 F5 FF  größter Codepoint, den UTF-1 in 2 Bytes kodieren kann
U+4016 E4 80 96 F6 21 21
U+FFFF EF BF BF F7 65 AF
U+10000 F0 90 80 80 F7 65 B0
U+38E2D F0 B8 B8 AD FB FF FF größter Codepoint, den UTF-1 in 3 Bytes kodieren kann
U+38E2E F0 B8 B8 AE FC 21 21 21 21  ab hier benötigt UTF-1 5 Bytes und ist somit ineffizienter als UTF-8
U+FFFFF F3 BF BF BF FC 21 37 B2 7A
U+100000 F4 80 80 80 FC 21 37 B2 7B
U+10FFFF F4 8F BF BF FC 21 39 6E 6C Größter Codepoint, der heute in Unicode erlaubt ist
U+7FFFFFFF FD BF BF BF BF BF FD BD 2B B9 40

Weblinks

Einzelnachweise