Tips für Web-Profis (Designer & HTML-Autoren)

Zeichenkodierung Teil I

Zeichensatz und Kodierung

Um Texte im Internet zu verbreiten, muss die Schrift letzten Endes in digitale Signale übertragen werden. Schon sehr früh waren Computer in der Lage, mit den Buchstaben A bis Z (groß und klein), den Ziffern 0 bis 9 sowie einigen Satz- und Sonderzeichen umzugehen. Dazu hatte man einen Zeichensatz definiert. Ein Zeichensatz (engl. Character Set) ist einfach eine Liste mit den Zeichen, die der Computer darstellen können soll.

Dann hatte man noch definiert, durch welche Zahlenwerte jedes dieser Zeichen durch den Computer repräsentiert werden soll. Ein Computer kann ja nur mit (binären) Zahlen arbeiten. Daher muss dem Computer das Schreiben und Ausgeben von Zeichen per Programmierung beigebracht werden, bei der eine festgelegte Liste hinterlegt wird. Wenn der Computer dann einen Befehl erhält wie: „Zeichen Nummer 65 ausgeben!”, dann wird er z.B. den Buchstaben A ausgeben. Und Zeichen Nummer 66 ist vielleicht der Buchstabe B. Eine komplette Liste ist im Computer hinterlegt. Diese Zuordnung von Zeichen zu entsprechenden Zahlenwerten nennt man Zeichenkodierung (engl. Character Encoding).

Am Anfang war der ASCII-Standard

Je mehr Zeichen in den Zeichensatz aufgenommen werden, desto größer werden die Zahlenwerte, die man zu ihrer Kodierung braucht. Gerade in den Anfangszeiten der Computer musste noch um jedes Bit gefeilscht werden. Daher beschloss man, nur Zahlenwerte zu verwenden, die mit 7 Bit dargestellt werden können. Mit 7 Bit lassen sich exakt 128 verschiedene Werte darstellen.. (Für Mathe-Freunde: 27 = 128.)

Bereits in den 1960er Jahren etablierte sich unter dem Namen ASCII die bis heute populärste Zeichenkodierung für die ersten 128 Zeichen. Darin sind neben Zahlen, Buchstaben und Satzzeichen auch einige nicht lesbare Steuerzeichen enthalten.

Sind 128 Zeichen genug?

Technisch gesehen kann man mit einem 128 Zeichen langen Zeichensatz über die Runden kommen. Aber die Sprache ist ein zartes Pflänzlein und bestimmt (ist) unser Denken. Jede Abweichung führt unweigerlich zu Missverständnissen oder Kreativitätsverlust. Wer diese Ansicht nicht teilt der lese einfach: Korrekt dargestellte Texte sehen netter aus (Stilfrage) und lesen sich besser (Effizienzfrage).

Denkt man darüber nach, welche Zeichen im ASCII nicht repräsentiert sind, fallen einem zunächst die Umlaute und das scharfe S ein. Das wurde früher grob und schlecht gelöst in dem man den Leuten ein Ae für ein Ä und ein ss für ein ß vormachte. Ae ist nicht Ä (Aerodynamik) und ein Doppel-S ist kein scharfes S (Maße haben keine Masse). Sprachen sind unser Denken und Phlegmatismus führt unweigerlich zu Missverständnissen.

Selbst ein englischsprachiger Text kommt heute kaum mit dem Zeichensatz des ASCII aus: Währungssymbole sehen professioneller aus als Abkürzungen (£, ¥, €); ausländische Namen von Personen (Lech Wałęsa, Søren Kierkegaard), Städten (Haßfurt) und Firmen (Citroën) wollen richtig geschrieben werden; zu einem schönen Schriftbild gehören «diese» oder „jene” Anführungszeichen und man braucht vielleicht Zeichen wie das Copyright-Symbol (©).

Vom 129. bis zum 256. Zeichen

Schön, dass wir nicht nicht auf 128 Zeichen limitiert sind: Der Speicher unserer Computer werden in 8 Bit großen Einheiten angesprochen. Einen 8 Bit großen Datenblock nennt man ein Byte. Wie wir oben gelesen haben, belegt ASCII nur die durch 7 Bit darstellbaren 128 Werte (0 bis 127). Das 8. Bit hatte damals noch bei einigen Rechnern eine besondere Funktion; andere setzten es einfach immer 0. Es wäre Verschwendung, das 8. Bit weiterhin einfach zu nullen. Wenn wir alle 8 Bit der Bytes nutzen, kann jedes Byte 256 verschiedene Zahlenwerte (0 bis 255) darstellen. Also können wir unsere Umlaute, Akzente, Währungszeichen, Anführungszeichen, das scharfe S und weitere Sonderzeichen als Zahlenwert 128 bis 255 definieren.

So geschehen z.B. in den 1980er Jahren als Standard mit dem Namen ISO 8859‑1, auch Latin‑1 genannt. Dieser enthält praktisch alles, was man für die west-europäischen Sprachen braucht. Damals gab es noch keinen Euro und mithin kein Eurozeichen? Richtig. Das kam 1999 mit der Nachfolgeversion, genannt ISO 8859‑15 (Latin‑9). Bei ihr wurden ein paar weniger bedeutende Zeichen durch das Euro-Synbol € und ein paar bis dahin vermisste zusätzliche Buchstaben aus dem Französischen und Finnischen ersetzt.

Mehr passte aber auch nicht hinein. Für die gar lustigen Buchstaben unserer polnischen Nachbarn war kein Platz mehr in ISO 8859‑1. Aber zum Glück hatte man von Anfang an auch an die Ost-Europäer gedacht und ihrer Sprache ISO 8859‑2 (Latin‑2) gewidmet. Ähnliches für sonstige Sprachgruppen. Insgesamt gibt es unter ISO 8859 ganze 15 gültige Zeichenkodierungen. Damit sind praktisch alle Sprachen abgedeckt, die das lateinische Alphabet benutzen.

Es sei noch erwähnt, dass die ersten 128 Zeichen bei allen oben genannten Kodierungen gleich sind, nämlich so wie im ASCII definiert. Das hat sich im Rahmen der Kompatibilität auch bewährt.

Sind 256 Zeichen genug?

Leider reichen auch 256 Zeichen für die internationale Kommunikation nicht aus. Erstens gibt es multilinguale Dokumente und zweitens verbaut man sich mit einem so limitierten Zeichensatz viele Möglichkeiten:

Hier kommt Unicode ins Spiel. Es sprengt die Grenze von 256 Zeichen pro Zeichensatz, indem teilweise oder durchgängig mehrere Bytes zum Repräsentieren eines Zeichen verwendet werden. Das Resultat ist ein Zeichensatz mit vielen Tausenden von Zeichen. Das wird im zweiten Teil (Link s.u.) erkärt.

Zuvor sollte man ein paar Probleme verstehen, die allen Zeichenkodierungen gemeinsam sind:

Warum es im Web so viele Probleme mit Zeichensätzen gibt

Damit Zeichen richtig dargestellt werden, müssen folgende Bedingungen erfüllt sein:

  1. Der Konsument (z.B. die Browser- oder Email-Software) muss wissen, wie der Text kodiert ist.
  2. Der Konsument muss diese Kodierung umsetzen können.

Im Falle von Web-Browsern ist die zweite Bedingung meistens erfüllt. Nur passieren sehr oft folgende Fehler:

Daher hier der erste Tip zum Thema: Es muss sichergestellt sein, dass eine Seite Information über ihre Kodierung enthällt. Das kann der Server tun, wenn er entsprechend konfiguriert ist. Da wir den Server meist nicht selber konfigurieren und weil wir auf Nummer sicher gehen wollen, bietet sich ein HTTP-Header-Äquivalent für den Content-Type-Header an. Dazu schreibt man folgendes in den Head-Abschnitt der HTML-Datei. Die Syntax am Beispiel:

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

Das soll allerdings nicht heißen, dass ich diesen Zeichensatz bzw. seine Kodierung empfehle. Ich halte sie für nicht mehr zeitgemäß, seitdem UTF-8 breite Unterstützung findet. Um Unicode im Allgemeinen und UTF-8 im Speziellen geht es im zweiten Teil.

© Hermann F., 2010

Valid XHTML 1.0 Strict