InfoCenter

UTF-8

Das UTF-8 Format ist die am weitesten verbreitete Kodierung für Unicode Zeichen. Ein UTF-8 kodiertes Zeichen benötigt variabel 1 bis 4 Byte. Optimiert ist UTF-8 für die Speicherung von ASCII Zeichen. Im ASCII Bereich mit Werten von 0 bis 127 wird in dieser Kodierung daher nur ein Byte pro Zeichen verwendet, der Wert dieses Bytes ist der gleiche wie bei der ASCII Kodierung. Daher eignet sich die UTF-8 Kodierung besonders für Texte, die hauptsächlich aus ASCII oder ANSI Zeichen bestehen und nur wenige andere Zeichen beinhalten, wie dies zum Beispiel bei Texten der deutschen oder englischen Sprache sowie vieler europäischer Sprachen der Fall ist.

Während die ersten 128 Zeichen (ASCII) ein Byte benötigen, benötigen die nächsten 1920 Zeichen zwei Byte. Diese Zeichen sind lateinische Buchstaben mit diakritischen Zeichen wie die deutschen Umlaute, oder griechische und kyrillische Buchstaben. Vier Bytes werden nur für selten verwendete Zeichen verwendet, wie zum Beispiel ungewöhnliche Chinesische, Japanische und Koreanische Zeichen.

Verwendung und Verbreitung

Vor allem im Internet und in Bereichen der Datenübertragung hat die UTF-8 Kodierung in den letzten Jahren zunehmend an Bedeutung gewonnen. Unterstützt wurde diese Entwicklung unter anderem vom World Wide Web Consortium, das UTF-8 als Standard-Kodierung von XML und HTML empfiehlt oder der Internet Engineering Task Force, die von allen neuen Internetprotokollen verlangt, dass UTF-8 unterstützt wird.  So sind aktuell bereits über 97 % aller Internetseiten UTF-8 kodiert womit UTF-8 die mit Abstand am weitesten verbreitete Kodierung im Web ist. Auch die früher sehr weit verbreiteten benannten Zeichen (HTML Entities) verschwinden heute immer mehr aus den Quelltexten der Internetseiten und werden durch UTF-8 kodierte Zeichen ersetzt.

Programmintern wird UTF-8 dagegen seltener verwendet. Beispielsweise nutzt Windows intern UTF-16.

Vorteile und Nachteile

Ein Vorteil von UTF-8 besteht vor allem im geringen Speicherbedarf der bevorzugten Zeichen. Bei der Speicherung eines englischen Textes, der nur aus den Zeichen A-Z, a-z, 0-9 und gebräuchlichen Satzzeichen besteht, benötigt UTF-8 halb so viel Speicherplatz wie UTF-16 und sogar nur ein Viertel des Speicherplatzes von UTF-32. UTF-8 kommt für diese Zeichen mit nur einem Byte aus während UTF-32 immer vier Byte pro Zeichen benötigt und UTF-16 mindestens zwei Byte. Dennoch lassen sich mit UTF-8 alle Zeichen abbilden, was mit anderen Kodierungen wie ASCII oder ANSI, die ebenfalls für ihre Zeichen nur ein Byte benötigen, nicht möglich ist.

Ein Nachteil von UTF-8 ist die größere Dateigröße wenn viele der nicht bevorzugten Zeichen, das heißt, die Zeichen, die 3 oder 4 Bytes benötigen, verwendet werden. In solchen Fällen wären andere Kodierungen die platzsparendere Wahl.

Ein weiterer Nachteil ist, dass durch die variable Byte-Anzahl pro Zeichen weder leicht auf ein bestimmtes Zeichen im Text zugegriffen werden kann, noch die Länge eines UTF-8 kodierten Textes einfach ermittelbar ist. In beiden Fällen müssen zunächst alle Bytes durchgegangen und einzeln interpretiert werden. In Kodierungen wie UTF-32 ist dies deutlich einfacher: Dadurch dass jedes Zeichen exakt 4 Bytes hat, ist die Länge eines Textes allein aufgrund der Byte-Anzahl unmittelbar bestimmbar (Bytes / 4) und auch zum x-ten Zeichen im Text kann einfach gesprungen werden ohne den sonstigen Text zu kennen, da sich die Anfangs-Byte-Position automatisch aus dem vierfachen der Zeichenposition ergibt.

Byte Order Mark

Die Byte Order Mark (BOM) von UTF-8 besteht aus der Bytesequenz EF BB BF, die als die Zeichen  erscheinen können, insofern das entsprechende Programm nicht mit UTF-8 umgehen kann. Das Problem der Byte Reihenfolge stellt sich zwar nicht bei einer UTF-8 Kodierung, dennoch ist es eindeutiger eine BOM zu verwenden, damit darauf hingedeutet wird, um welche Kodierung es sich handelt. Dennoch ist eine sichere Unterscheidung nicht zu 100 Prozent eindeutig, da natürlich auch in ANSI Texten die Zeichenkette  erlaubt ist und zumindest theoretisch am Anfang einer Datei vorkommen könnte.