Zumindest gefühlt sieht es so aus, dass deutschsprachige Websites nach wie vor überwiegend mit der Textkodierung ISO-8859-1 arbeiten, auch geläufig unter der Bezeichnung ISO-LATIN-1. Warum das so ist, lässt sich zwar nur vermuten, beitragen dürfte aber wenigstens zum Teil die Unkenntnis der Nachteile. Besser gesagt der Vorteile, die mit der wesentlich fortschrittlicheren Kodierung UTF-8 einhergehen. Wundern kann das kaum: liest man einschlägige Fachartikel zum Thema, fällt auf, dass die meisten spätestens im zweiten Satz in einen esoterischen Nerd-Jargon verfallen, der für den Normalverbraucher schlichtweg unverständlich bleibt.
Versuchen wir es mal einfacher: Text auf dem Bildschirm ist alles andere als selbstverständlich, es gibt ja noch etwas mehr als A, B, C usw. Intern arbeitet der Rechner mit Zahlencodes, bei denen jedem Zeichen eine Zahl zugewiesen ist. Zur Übersetzung bedienen sich alle Beteiligten einer Tabelle, aus der die Zuordnungen Zeichen/Codenummer ersichtlich sind. Die Basistabelle dafür ist die sog. ASCII-Tabelle, die aber lediglich 128 Zeichen enthält und damit keinen Platz für ausufernde Zeichensammlungen hat, etwa die zahllosen Umlaut-Varianten, gar nicht zu reden von Exotismen wie etwa kyrillischen oder chinesischen Zeichen. Um diesem unbefriedigenden Zustand entgegen zu treten, wurden erweiterte Kodierungstabellen geschaffen, darunter die im westeuropäischen Raum beliebte ISO-8859-1 bzw. ISO-LATIN-1. Sie besteht aus immerhin 256 Zeichen, wobei die ersten 128 mit denen der ASCII-Tabelle identisch sind, unterm Strich ist also Platz für 128 zusätzliche.
128 dazu, einfach so? Das ist ja super, könnte man meinen, dummerweise werden sowohl bei ASCII als auch der Latin-1-Erweiterung jeweils 32 für Steuerzeichen reserviert, summa summarum bleiben also die 192 Zeichen übrig, die in der folgenden Abbildung zu sehen sind:

Immerhin sind die meisten westeuropäischen Umlaute enthalten, das Ä ebenso wie das ø. Nicht minder interessant ist aber, was alles nicht drin ist, beispielsweise
Also insgesamt nichts für Freunde ausgefeilten Satzes und korrekter Interpunktion.
Auf HTML-Seiten behilft man sich traditionell damit, das Problem zu umgehen, indem die fraglichen Zeichen »maskiert«, also als HTML-Umschreibungen notiert werden. Aus dem Ä wird dann ein Ä oder – schlimmer noch – ein Ä. Der Vorteil dieser Methode ist eindeutig, dass man sich auf der sicheren Seite bewegt, wenn alle Verdächtigen konsequent maskiert werden. Eklatanter Nachteil ist der Anblick des Textes im Quellcode, etwa die Klagen des Geisterchors in Fausts Studierzimmer:
Weh! weh!
Du hast sie zerstört
Die schöne Welt,
Mit mächtiger Faust;
Sie stürzt, sie zerfällt!
Ein Halbgott hat sie zerschlagen!
Wir tragen
Die Trümmern ins Nichts hinüber,
oder gar so:
Und klagen
Über die verlorne Schöne.
Mächtiger
Der Erdensöhne,
Prächtiger
Baue sie wieder,
In deinem Busen baue sie auf!
Neuen Lebenslauf
Beginne,
Mit hellem Sinne,
Und neue Lieder
Tönen darauf!
Ist das nicht eklig? Dabei wäre es in diesem Beispiel selbst bei Verwendung von ISO-LATIN-1 unnötig, weil im Text nichts vorkommt, was in der Tabelle nicht enthalten wäre (vorausgesetzt, man arbeitet sauber, dazu später noch mehr). Der gemeine Texteditor wird allerdings einen Text entweder umwandeln oder nicht umwandeln – dass er nur die kritischen Zeichen umwandelt, dürfte eher selten sein. Dasselbe gilt für die Umwandlung von Texten aus einer Datenbank, etwa mit der PHP-Funktion htmlentities();. Also müsste man sich entweder die kritischen Zeichen einzeln vorknöpfen, was schnell zum uferlosen Spiel gerät oder man schreibt sich eigene, sozusagen handverlesende (PHP-)Umwandlungsfunktionen, die den ganzen Kram automatisieren (was wir lange Jahre gemacht haben).
Ganz dumm läuft es allerdings, wenn auch nur eine der beteiligten Komponenten nicht weiß, dass der nicht maskierte Text ISO-LATIN-1 sein soll. Dann kann man nur hoffen, dass sie das standardmäßig annimmt – tut sie das nicht, ist ein wirrer Zeichensalat die Folge. Auch dazu später noch mehr – schauen wir uns zunächst die Kodierung UTF-8 ein wenig näher an.
Die Abkürzung UTF-8 steht für 8-bit Unicode Transformation Format. UTF-8 ist demnach in der Lage, sämtliche Unicode-Zeichen abzubilden, im Klartext also die meisten Alphabete und Zeichensysteme der Welt, lateinische Buchstaben und arabische Zahlen genauso wie hebräische, kyrillische oder griechische Zeichen und was sonst noch so alles geschrieben wird. Und zwar komplett und ohne irgendetwas maskieren zu müssen. Unicode ist, wenn man so will, der Standard für die globalisierte Welt und UTF-8 seine Kodierungsentsprechung. Verglichen damit sehen sämtliche »traditionellen« Kodierungstabellen wie hilfloses Stückwerk aus, und es gibt weit und breit kaum Gründe, warum man daran kleben bleiben sollte.
Man muss übrigens keineswegs mit exotischen Sprachen arbeiten, um von UTF-8 zu profitieren. Der Punkt, ist, dass man quasi nach Herzenslust eintippen kann, was immer man will, nichts maskieren muss und sich keine Gedanken zu machen braucht, was am anderen Ende herauskommt. Ein paar Beispiele:
⅛ ℅ œ ƒ ‰ † № ™
Die Zeichen werden selbst auf einem chinesischen Browser korrekt angezeigt, sofern die verwendete Schrift diese Zeichen, also den Unicode-Zeichenvorrat vollständig oder weitgehend enthält. Anders herum: enthält die Schrift, die bei Ihnen zur Anzeige dieser Seite verwendet wird – Lucida, Verdana, Arial, sans-serif, in dieser Reihenfolge wird die Anzeigeanweisung abgearbeitet, je nachdem, was installiert ist oder nicht – griechische Zeichen, dann ist auch das hier kein Problem:
Οὐχὶ ταὐτὰ παρίσταταί μοι γιγνώσκειν, ὦ ἄνδρες ᾿Αθηναῖοι,ὅταν τ᾿ εἰς τὰ πράγματα ἀποβλέψω καὶ ὅταν πρὸς τοὺς λόγους οὓς ἀκούω· τοὺς μὲν γὰρ λόγους περὶ τοῦ τιμωρήσασθαι Φίλιππον ὁρῶ γιγνομένους, τὰ δὲ πράγματ᾿ εἰς τοῦτο προήκοντα, ὥσθ᾿ ὅπως μὴ πεισόμεθ᾿ αὐτοὶ πρότερον κακῶς σκέψασθαι δέον.
Falls nicht, bietet die Schrift keine entsprechende Unicode-Unterstützung und Sie sehen Fragezeichen – dennoch bleibt die Definition der Zeichen eindeutig, es kommen also nicht plötzlich seltsame »Hieroglyphen« heraus. Im Fall der eingangs besprochenen Sorgenkinder Anführungszeichen, Ellipse oder Euro wird sich die Frage nach der Unicode-Unterstützung der Schrift ohnehin nicht stellen, die sind in allen Systemschriften enthalten, mit denen im (westlichen) Web gemeinhin hantiert wird.
Wenn weiter oben von »kaum Problemen« die Rede war, die sich bei der Verwendung von UTF-8 stellen, bezog es sich auf das ebenfalls schon angedeutete »saubere Arbeiten«. Sauber meint in dem Zusammenhang, dass der ganzen Kette erstens klar sein muss, dass UTF-8 im Spiel ist und zweitens alle Glieder UTF-8 können. Der trivialste Schritt im Web besteht darin, dass man dem Browser klipp und klar sagt, was Sache ist. Im Kopfbereich der HTML-Seite muss nur die Angabe
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
erscheinen, schon weiß der Browser, was er zu tun hat. In PHP-Scripts gibt es die Option, die Kodierung via header festzulegen:
<?php
header('Content-Type: text/html; charset=utf-8');
?>
Ganz wichtig ist auch, dass die im Texteditor produzierten HTML-Seiten und Scripts mit einer UTF-8-Kodierung gespeichert werden, wozu unbegreiflicherweise leider nicht alle Editoren in der Lage sind. Falls Ihr Editor das nicht beherrscht, schmeißen Sie ihn weg, er hat seine Daseinsberechtigung verwirkt, man muss es leider so sagen. Geht der Editor intern von einer anderen Kodierung aus und speichert die Datei mit dieser irrigen Annahme ab, wird das ganze Gebilde spätestens im Browser in sich zusammenbrechen, weil das, was er tun soll und das, was die Datei enthält, nicht zueinander passen – die (logische) Folge ist wiederum Zeichensalat.
Eher theoretisch ist hingegen das Problem veralteter Browser – Exemplare, die mit der Angabe UTF-8 nicht zurecht kommen, werden sich selbst mit der Lupe kaum noch finden lassen.
Unterm Strich spricht also alles für UTF-8. Durchsetzen wird es sich, so oder so, es ist nur eine Frage der Zeit. Als Belohnung winken ein wesentlich klarerer, schlankerer Code und müheloseres Arbeiten, zudem entfallen viele Detail-Schwierigkeiten, die beim dynamischen Aufbau von Websites durch das »rein und raus« der beteiligten Datenbanken immer wieder auftreten.
#1 | molily | 01.04.06, 22:49
Es ist nicht bloß, wie vermutet, die Unkenntnis, die zur Verwendung von Latin-1 führt. Die wenigsten legen Wert auf typographisch korrekte Anführungszeichen et cetera, selbst wenn man sie darauf hinweist. Diejenigen, die sich darum scheren, kann man an einer Hand abzählen, und all diese gehören einer Technik- und Typographie-affinen Szene an. Das Euro-Zeichen wird meist unwissentlich in Windows-1252 kodiert (die Browser sind ja hinreichend fehlertolerant) oder man nutzt den euro-Entity. Freilich gibt es Vorteile und UTF-8 vereinfacht vieles, aber die Zeichen aus ISO-8859-1 reichen vielen schlicht aus. Die Frage nach UTF-8 stellt sich meiner Erfahrung nach vielen erst, wenn sie Websites mit unterschiedlichen Sprachen/Schriftsystemen/internationalem Publikum erstellen wollen.
Dass »alle Glieder UTF-8 können«, ist leider nicht selbstverständlich und einigen, denen ich den Umstieg auf UTF-8 geraten habe, haben beim Gedanken an das Backend, dass sie hätten überarbeiten müssen, einen Rückzieher gemacht. Man denke an PHP ohne mbstring-Extension und ältere Datenbank-Systeme. Sicher, solche Software hat im Grunde keine Daseinsberechtigung, aber sie existiert nach wie vor. Da kann man sich ins Zeug legen, wie man will – unterm Strich spricht leider einiges gegen UTF-8.
#2 | Ralf Schmid | 02.04.06, 12:54
Okay, in punkto typographischer Gleichgültigkeit muss ich Dir leider zustimmen. Was nicht heißt, dass man das Werben für die Minima typographischer Kultur deswegen gleich einstellen sollte, schließlich leben wir im Land der Dichter und Denker.
Nicht ganz nachvollziehen kann ich die Motive der Überarbeitungsunwilligen. Ich weiß zwar nicht, wie deren Backends im einzelnen aufgebaut sind, eine Umkodierung stelle ich mir aber nicht so gewaltig vor, dass sie nicht zu stemmen wäre. Und der Datenbank-Content sollte in den meisten Fällen doch via Konverter zu schaffen sein. Es kann ja täuschen, aber ich denke wie gesagt schon, dass sich UTF-8 über kurz oder lang auf breiter Front durchsetzen wird. Mal unterstellt, das bislang Erarbeitete ist nicht auf ein bestimmmtes Verfallsdatum hin getrimmt, sondern langfristig angelegt, dann wird man die Anpassung irgendwann ohnehin vornehmen. Nur wird es dann nicht weniger Arbeit sein, sondern mehr. Aber gut, natürlich darf jeder selbst entscheiden, was er macht.
#3 | Jann | 04.04.06, 12:31
Super Artikel.
Ich benutze selbst seit einiger Zeit UTF-8, allerdings war mir vorher nicht bekannt, dass man bei Gebrauch dieses Zeichensatzes auf die “Maskierung” der Sonderzeichen verzichten kann.
#4 | T. Basar | 27.04.06, 14:32
“Schön geschrieben” :)
#5 | dridi_kimoo | 07.05.06, 09:38
ماعندي تعليق
#6 | konfuzius | 25.01.07, 17:22
实验室里开小组会:两个西班牙人
#7 | Ralf Schmid | 25.01.07, 17:36
Ebend!
#8 | Sven Reithmeyer | 13.03.07, 10:24
Guter Artikel! Ich habe selbst vor kurzer Zeit auf UTF-8 umgestellt und muß sagen das es mehr Vorteile als Nachteile gibt. Allein die Möglichkeit Umlaute in der URL zu verwende, welche von Big-G auch interpretiert werden ist ein riesen Vorteil.
#9 | mg | 17.04.07, 10:55
@Sven Reithmeyer
Ich würde definitv keine Umlaute in URLs verwenden, da Suchmaschinen häufig diese falsch auslesen. Das kann z.B. dazu führen das bestimmte Begriffe falsch in die Suchmaschine einfließen, und nicht gefunden werden können
Google ist dagegen auch noch nicht 100% gefeilt.
Das gleiche mit Groß- und Kleinschreibung. Ich stellte mit erachetn fest, als ich eines morgens über 200 Error-Mails bekam. Der Grund: ein Bot rief alle gefunden URLs auf einer von mir administrierten Shop-Seite als lowercase() auf, und konnte gewisse Controller mit Groß/Kleinschreibung einfach nicht finden.
#10 | DolbeGräb | 19.06.07, 01:20
wunderbarer artikel, dankeschön.
aber deine anführungszeichen sind leider auch nich gänzlich korrekt ;o)
es lautet nämlich 99-66, nicht 99-99…. wenn schon mit penibelität gearbeitet wird.
#11 | Ralf Schmid | 19.06.07, 09:00
Nun ja. Ich werde jetzt nicht das alte Bild vom Schuster bemühen, der die schiefsten Hacken hat. Nein, das werde ich nicht …