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.