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.
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 pq
3-Byte-Sequenz
≥ 38E2E
FC…FF pqrs
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-Operation wird mit % gekennzeichnet, die Division ist eine Ganzzahldivision ohne Rest. Alle Zahlen sind Hexadezimalzahlen.
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