UTF-7
UTF-7 ist eine Kodierung des Unicode-Zeichensatzes, die in RFC 2152 definiert wird. UTF-7 ist trotz der Namensähnlichkeit zu anderen Kodierungen nicht Bestandteil des Unicode-Standards. UTF-7 erlaubt die Verwendung von Unicode in nicht 8-bit-festen Umgebungen.
Motivation
Viele Protokolle im Internet (etwa SMTP für E-Mail und NNTP für News) setzen die Verwendung von ASCII voraus. Diese Zeichenkodierung erlaubt nur 128 verschiedene Zeichen, die in 7 Bit gespeichert werden. Alle übrigen UTF-Kodierungen verwenden mindestens 8 Bit, um ein Zeichen zu kodieren. So würde eine Übermittlung von UTF-8 anschließend eine 7-Bit-Kodierung erfordern.
Es existieren verschiedene Kodierungsverfahren (siehe MIME), so beispielsweise Base64 und Quoted-printable, die beliebige 8-Bit-Binärdaten in 7-bit-ASCII-Text umwandeln. Abhängig von diesen Kodierungsverfahren und von den zu kodierenden Daten bläht sich die Datenmenge durch die Kodierung auf. UTF-7 wurde entworfen, um diesen zusätzlichen Datenverbrauch bei der Verwendung von Texten, die nur wenige Unicode-Zeichen enthalten, möglichst gering zu halten, und gleichzeitig Textpassagen, die in 7-bit-ASCII darstellbar sind, lesbar zu lassen.
Kodierung
Bei UTF-7 werden die Zeichen A–Z a–z 0–9'(),./:?-
so übermittelt, wie sie sind. Die ASCII-Zeichen !"#$%&*;<=>@[]^_`{|}
können direkt übertragen werden, sollten aber ebenfalls kodiert werden, da sie eventuell nicht durch alle E-Mail-Gateways korrekt übertragen werden.
Alle anderen Zeichen werden speziell kodiert. Hierfür wird eine Folge von zu kodierenden Zeichen als Strom von 2-Byte-Zeichen (UTF-16, evtl. mit Surrogates) nach einem modifizierten Base64-Verfahren (ohne abschließendes =
) in einen Strom von ASCII-Zeichen umgewandelt. Der Start einer solchen kodierten Zeichensequenz wird durch ein Pluszeichen (+
) angezeigt, das Ende durch ein Minuszeichen (-
) oder durch das erste ASCII-Zeichen, das nicht als Ergebnis der Base64-Kodierung auftreten kann. Überflüssige Bits bei dieser Kodierung sind auf 0
zu setzen.
Bei englischem Text ist diese Kodierung von Menschen ohne Weiteres zu lesen, da kodierte Sonderzeichen nur sehr selten auftreten. Die Umlaute und Sonderzeichen anderer westeuropäischer Sprachen müssen jedoch kodiert werden, was den Text bereits merklich entstellt. Texte in Sprachen, die nicht das lateinische Alphabet verwenden, sind vom Menschen nicht mehr ohne Weiteres lesbar.
- Beispiele
- Der Text „Wikipedia – Die freie Enzyklopädie“ wird in der Kodierung UTF-7 beispielsweise zu
Wikipedia +IBM Die freie Enzyklop+AOQ-die
. - Das Wort Übergröße wird in UTF-7 zu +ANw-bergr+APYA3w-e, was mit 19 Byte etwas kompakter ist, als die 24 Byte, die quoted-printable UTF-8 benötigt: =C3=9Cbergr=C3=B6=C3=9Fe.
UTF-7 hat sich trotz seiner etwas höheren Kodierungseffizienz jedoch nicht durchsetzen können, da andere Verfahren wie quoted-printable und Base64 von nahezu jedem E-Mail- und News-Programm verstanden werden und der größere Kodierungsüberhang in der Praxis keine Rolle spielt.