001
27.04.2010, 03:01 Uhr
0xdeadbeef
Gott (Operator)
|
Naja, wenn du einen Nicht-UTF-8-Text (in diesem Fall vermutlich iso-8859-1 oder iso-8859-15) als UTF-8 interpretierst, ist es kein Wunder, wenn Sonderzeichen nicht richtig angezeigt werden.
Mit den Zeichensätzen hat es Folgendes auf sich: In den 60er Jahren, als Computer und artverwandte Geräte langsam die Infrastruktur zu erobern begannen, wurden auch die ersten Standards für die Darstellung von Text auf solchen Maschinen entwickelt. Ich lasse EBCDIC mal beiseite, weil es inzwischen nur noch historische Bedeutung hat, aber ASCII bildet die Grundlage für alles, was wir heute benutzen.
ASCII tauchte zunächst in Verbindung mit Fernschreibern auf. Ein Zeichen war ein 8-bit-Byte, dessen oberstes Bit als Parity benutzt wurde, um Übertragungsfehler erkennen zu können. Das ließ 7 bit als Datenraum, also 128 verschiedene Zeichen, von denen 32 für Steuerzeichen reserviert waren - 96 druckbare Zeichen blieben übrig.
Das war genug, um das lateinische Alphabet in Groß- und Kleinschreibung, Ziffern und ein paar der im Englischen üblichsten Sonderzeichen darzustellen, und für den Anfang konnte man damit auch ganz gut leben, aber mit der Zeit begannen die Leute, Ansprüche zu stellen. Umlaute, Accents, andere Währungszeichen als der Dollar - ziemlich schnell reichten 96 Plätze nicht mehr aus. Als die Übertragungstechnik weit genug fortgeschritten war, entwickelten sich also eine ganze Reihe von Zeichensätzen, die das oberste Bit mitbenutzten und so weitere 128 Plätze für Sonderzeichen aller Art freiräumten.
Problematisch dabei war, dass sich diese teils stark voneinander unterschieden. In Russland braucht man etwa ganz andere Buchstaben als in Westeuropa. Um den Dschungel wenigstens halbwegs zu beherrschen, standardisierte die ISO einige dieser Zeichensätze in der ISO/IEC 8859-Familie von Zeichensätzen, von denen heute in Westeuropa iso-8859-1 und iso-8859-15 gebräuchlich sind. Da das ganze aber spätestens dann auseinander fliegt, wenn man in Japan und China ankommt (80000 Kanji sind beim besten Willen nicht in ein Byte zu pressen), musste langfristig eine universelle Lösung her, die mächtig genug war, Text in all seinen Facetten darstellen zu können - das sollte Unicode werden.
Unicode ist insofern etwas komplexer, als dass es nicht nur jedem Zeichen einen Wert zuweist, sondern Textstruktur erfasst. Etwa kann man ein é in Unicode als Mischung aus dem Zeichen e und dem Accent ´ darstellen. Wie man sich denken kann, erzeugt das gewisse Kompatibilitätsprobleme mit bestehenden Systemen - zum einen sind die alle quer durcheinander auf alle möglichen, verschiedenen Arten kodiert, zum anderen ist Unicode von zwar nicht völlig, aber doch merkbar anderer Struktur.
Die Lösung, die dafür gefunden wurde, besteht in der Unicode-Kodierung UTF-8. UTF-8 ist so aufgebaut, dass die ganz alten ASCII-7-Zeichen, die alle gebräuchlichen Zeichensätze gemeinsam haben, in UTF-8 genau so kodiert werden, wie es vorher auch der Fall war, und ein Zeichen, das außerhalb dieses Bereichs liegt, die Länge eines dahinterliegenden Schwanzes von Zeichen bezeichnet, die das außerhalb des einfachen Bereichs liegende Zeichen kodieren.
§ liegt außerhalb dieses Bereichs, also musst du darauf achten, dass dein Webserver die Datei, in der es steht, so serviert, dass der Browser weiß, welchen Zeichensatz er benutzen muss.
Oder du benutzt einfach die §-Entity. -- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe Dijkstra |