Sonderzeichen werden falsch angezeigt

Der Editor zeigt Währungssymbole wie Euro € und Cent ¢, Sonderzeichen der Sprache wie das große und kleine Eszett ß und das ñ in Jalapeño ordentlich an, – aber trotzdem tauchen auf der Webseite kryptische Zeichen wie � und ä auf? Die möglichen Ursachen: falscher Zeichensatz, die Zeichen fehlen in der Schrift, das Betriebssystem beim Benutzer kann fehlende Zeichen nicht ersetzen.

In den Anfängen des Computerzeitalters war ASCII der meist verwendete und zuverlässigste Zeichensatz (nicht zu verwechseln mit einer Schrift, also einem Font). Mit Ascii stehen nur 128 Zeichen zur Verfügung, davon 32 Zeichen Steuerzeichen, die nicht angezeigt und gedruckt werden können. Umlaute waren den Entwicklern nicht in den Sinn gekommen.

Um an einen größeren Zeichenvorrat zu kommen, wurden über die Jahre erweiterte Zeichencodes wie ISO-8859, Latin-1 und Windows 1252, Mac Roman oder Big5 entwickelt, die allesamt nicht besonders kompatibel waren, bei russischen oder hebräischen Zeichen nur Fragezeichen produzierten, und beim kleinen ä die Fassung verloren.

Unicode

Unicode bringt die Schriftzeichen aller Kulturkreise dieses Planeten. Mit Unicode haben wir mathematische Zeichen, typografische Anführungszeichen, Wettersymbole und musikalische Noten, die Schrift der Khmer, das gotische Alphabet, Keilschrift und die Kleinbuchstaben der Cherokee (allerdings immer noch kein offizielles Klingonisch).

Unicode ist der Zeichenvorrat, eine durchnummerierte Liste von Zeichen, in der z.B. das A mit dem Code Point U+0041 kodiert ist. Hallo in Unicode ist U+0048 U+0065 U+006C U+006C U+006F.

UTF-8

UTF-8 ist eine Übersetzung der Unicode-Nummern in einen Binärcode (z.B. A -> 0100 0001). UTF-8 löst die meisten Probleme der Zeichenkodierung.

Unicode U+1E00 UTF-8 E1 B8 80 0xE1 0xB8 0x80

ÉGÉìÉRÅ[ÉfÉBÉìÉOÇÕìÔǵÇ≠ǻǢ

Wenn wir ein Dokument öffnen oder eine Webseite ansteuern und bekommen einen derartigen Wust von Zeichen vorgesetzt, hat das Textverarbeitungsprogramm oder der Browser die Datei oder die Webseite mit der falschen Kodierung geöffnet.

Wir könnten beim Validator des W3C prüfen, was schief läuft, wenn Sonderzeichen vom Browser verstümmelt werden.

The character encoding was not declared. Proceeding using windows-1252.

Immerhin zeigt der Validator die Fehlerursache: die Zeichenkodierung fehlt. Den Ratschlag Proceeding using windows-1252 schlägt man allerdings am besten sofort in den Wind.

Das Dokument OK, die Webseite nicht im Eimer. Ganz gleich, ob die Seite Mac Roman, Latin-1 oder shift_jis codiert war: mit UTF-8 werden alle Sonderzeichen vom ä bis zum Emoji korrekt angezeigt.

Webserver gar nicht oder anders konfiguriert

Der Server prüft anhand der ersten paar Bytes eines Dokuments, welche Zeichenkodierung (character encoding) gilt und benachrichtigt den Browser durch den Charset-Parameter im Content-Type-Header des HTTP-Protokolls.

Da aber manche Server nicht gestatten, einen Charset-Parameter zu senden und andere einfach nicht entsprechend konfiguriert sind, gibt es seit HTML4 ein Meta-Tag für den Zeichensatz der HTML-Datei im Kopf des Dokuments.

<meta http-equiv="content-type" content="text/html; charset=utf-8">

In HTML5 ist das Meta-Tag für den Zeichensatz kurz und bündig:

<meta charset="utf-8" >

meta charset=“utf-8″, aber Umlaute und Sonderzeichen sind trotzdem falsch

Wenn der Server mit einem anderen Zeichensatz konfiguriert ist, hilft auch meta charset=“utf-8″ im Kopf der Seite nicht, denn die Angaben im HTTP-Header überschreiben die im Dokument vorhandenen Angaben.

Zeichenkodierung in htaccess

Die meisten Provider unterstützen den Einsatz einer .htaccess-Datei im obersten Verzeichnis. Statt jede einzelne Seite mit dem Meta-Tag auszustatten, kann die Zeichenkodierung auch mit einer Zeile in der .htaccess-Datei festgelegt werden.

AddDefaultCharset UTF-8

Das hilft auch, wenn der Server aus unerfindlichen Gründen mit Latin-1 oder windows-1252 konfiguriert ist.

Zeichen nicht im Font

Sehr alte Browser – gleich ob IE 8 oder Firefox ohne Updates – haben ihre Probleme mit Sonderzeichen, wenn das Zeichen im Font der Seite nicht existiert. Die modernen Browser durchsuchen die Schriften des Systems nach dem fehlenden Zeichen, um es durch die Glyphe einer anderen Schrift zu ersetzen. Das mag von der Größe und Gewicht nicht passen, ist aber besser als Kästchen für fehlende Glyphen.

SITEMAP BLOG