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
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.
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
- ↑ kikaku.itscj.ipsj.or.jp (Memento vom 18. März 2015 im Internet Archive)