Zeichenkodierung bei HTML-Codes von Webseiten

Wenn man mit einem Editor Webseiten mit HTML-Code erstellt, dann muss man angeben, mit welcher Zeichenkodierung der HTML-Code der Webseite gespeichert werden soll. Die Auswahl der Zeichenkodierung erfolgt abhängig vom Editor, entweder beim Speichern der Datei oder in den Einstellungen des Editors. Die Angabe der Zeichenkodierung ist deshalb notwendig, weil ein Computer nur binäre Informationen in Form von 0 und 1 speichern kann. Daher wird für jedes Zeichen eine bestimmte Ziffernfolge zugeordnet, die aus den Ziffern 0 und 1 besteht und beim Speichern einer Datei wird statt den Buchstaben die Ziffernfolge abgelegt. Wenn man z.B. im Quellcode den Buchstaben A eingegeben hat und die Datei speichert, wird im Rechner die Ziffernfolge 1000001 gespeichert. Die eindeutige Zuordnung einer Ziffernfolge zu einem Zeichen wird Zeichenkodierung genannt.

HTML-Code ohne Angabe der Zeichenkodierung
Zeichenkodierung beim Speichern

Zeichenvorrat in Zeichensätzen

Damit eine binäre Ziffernfolge eindeutig einem Zeichen zugeordnet werden kann, ist eine gewisse Systematik erforderlich. Nur so können die Informationen in einer verwertbaren Form gespeichert werden. Es wäre nicht hilfreich, wenn auf einem Rechner z.B. für den Buchstaben A die Ziffernfolge 1000001 abgelegt werden würde und beim Speichern mit einem anderen Programm oder auf einem anderen Rechner eine ganz andere, z.B. 1011001 oder 1011101. Es muss also ein Norm geben, mit der festgelegt wird, dass für jeden Buchstaben beim Speichern eine bestimmte Folge aus binären Ziffern abgelegt wird und beim Auslesen dieser Ziffernfolgen diese wieder in die entsprechenden Buchstaben umgewandelt werden. Nur so ist ein fehlerfreier Datenaustausch möglich und der fehlerfreie Austausch von Daten gehört zu den grundlegenden Voraussetzungen in der Informationstechnik. Sonst könnte es passiert, dass man z.B. A speichert oder verschickt und beim Auslesen der Ziffernfolge B angezeigt bekommt.

Daher erfolgt die systematische Zuordnung von binären Ziffernfolgen zu einem Zeichen über einen standardisierten Zeichensatz. Mit einem Zeichensatz werden folgende Dinge definiert, die sich zum Teil aus gegenseitiger Abhängigkeit ergeben:

  • Anzahl der Bits: Bei einem Zeichensatz ist die Anzahl der binären Ziffern fest oder variabel definiert, die für die Zuordnung zu einem Zeichen benötigt werden. Wenn man z.B. für jedes Zeichen eine 4 Bit breite Ziffernfolge zuordnen würde, dann könnte man mit solch einem Zeichensatz höchstens 16 verschiedene Zeichen darstellen. Das wäre nicht mal ausreichend für das Alphabet. Daher wurden für den ASCII-Zeichensatz 7 Bits verwendet, den man für 128 verschiedene Zeichen verwenden konnte. Beim ANSI-Zeichensatz verwendet man 8 Bits und das ist ausreichend für die Verwendung von 256 verschiedenen Zeichen. Der Unicode-Zeichensatz kann 32 Bits breit sein und das reicht im Grunde aus, um alle Zeichen verwenden zu können, die es auf der Welt gibt. Auch sehr alte Schriftzeichen, die nicht mehr gebraucht werden, z.B. Runenschrift.
  • Zeichenvorrat: Durch die Anzahl der verwendeten Bits ergibt sich zwangsläufig eine Begrenzung der möglichen Zeichen, die binären Ziffernfolgen zugeordnet werden können. Bei der Entwicklung eines Zeichensatzes musste daher überlegt werden, für welche Zeichen es verwendet werden kann und für welche nicht. Beispielsweise ist das Zeichen für die Kreiszahl Pi (π) im ASCII- und ANSI-Zeichensatz nicht enthalten, da diese Zeichensätze nur für 128 bzw. 256 Zeichen verwendet werden konnten, weshalb man eine Auswahl treffen musste und wichtigeren Zeichen den Vorzug gab. Die Menge aller Zeichen eines Zeichensatzes nennt man Zeichenvorrat.
  • Zeichensatztabelle: Schließlich enthält ein Zeichensatz eine Zeichensatztabelle, in der jedem Zeichen eine binäre Ziffernfolge zugeordnet wird. Beim Speichern einer Datei wird auf dem Rechner für jedes Zeichen die zugeordnete Ziffernfolge abgelegt und beim Auslesen der Ziffernfolge, z.B. durch einen Browser, wird für eine Ziffernfolge das zugeordnete Zeichen angezeigt.
Anzahl der Bits
Zeichenvorrat
Zeichensatztabelle

Fehlende bzw. falsche Angabe der Zeichenkodierung in Webseiten

Wenn man Webseiten erstellt, dann muss man angeben, welche Zeichenkodierung für die Webseite verwendet wurde. Ist die verwendete Zeichenkodierung nicht angegeben, versucht der Browser, die Zeichenkodierung zu ermitteln, was nicht unbedingt erfolgreich sein muss oder es verwendet eine bestimmte Zeichenkodierung als Standard, die nicht mit der Zeichenkodierung der Webseite übereinstimmen muss. Und wenn der Browser eine falsche Zeichenkodierung verwendet, dann werden die binären Ziffernfolgen falsch zugeordnet und das kann sich dann so auswirken, dass einige Zeichen, z.B. deutsche Umlaute, falsch dargestellt werden. Das schränkt die Leserlichkeit der Texte erheblich ein. Der Benutzer kann zwar im Browser auf die richtige Zeichenkodierung umschalten. Doch die wenigsten verwenden bzw. kennen diese Funktion. Außerdem bliebe den Benutzern nur übrig, die Zeichenkodierung zu erraten und zu probieren und am Ende wüssten sie trotzdem nicht, ob es die richtige ist.

ANSI-Zeichenkodierung bei Ansicht UTF-8
UTF-8 Zeichenkodierung bei Ansicht ANSI

HTML-Codes für die Angabe der Zeichenkodierung

Es gibt mehrere Möglichkeiten, um die Zeichenkodierung anzugeben. Eine Möglichkeit ist, dies über eine Meta-Angabe im Head-Bereich der Webseite vorzunehmen. Die Zeichenkodierung sollte in dem Fall als erstes Element, direkt nach dem Befehl <head> eingegeben werden. Der Grund hierfür ist, dass ein Browser die Angabe der Zeichenkodierung innerhalb der ersten 1024 Bytes erwartet.

In HTML4:

Wurde die Zeichenkodierung ISO-8859-1 verwendet, fügt man in HTML4 das Meta-Element wie folgt im Head-Bereich ein.

<head>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">

Für die Zeichenkodierung UTF-8 ändert man in HTML4 den Code wie folgt um:

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

In HTML5

Die Meta-Angabe in HTML5 ist wesentlich kürzer. Bei ISO-8859-1 gibt man folgenden Code im Head-Bereich ein:

<meta charset="ISO-8859-1">

Für UTF-8 verwendet man in HTML5 folgenden Code:

<meta charset="UTF-8">

In XHTML:

Wurde die Webseite in XHTML erstellt, dann kann die Zeichenkodierung auch als XML-Prolog, noch vor dem Befehl <head> eingegeben werden. Der XML-Prolog in XHTML für die Zeichenkodierung ISO-8859-1:

<?xml version=“1.0“ encoding=“ISO-8859-1“ ?>
<html>

Für UTF-8 wird der XML-Prolog wie folgt eingegeben:

<?xml version=“1.0“ encoding=“UTF8“ ?>
<html>

Der XML-Prolog bewirkte bei einigen Browsern, dass der Browser in den Quirks-Modus versetzt wurde. Dadurch wurde unter Umständen das Layout der Webseite zerstört. Gemäß den Spezifikationen kann der XML-Prolog auch weggelassen werden, da es optional ist. In solchen Fällen sollte die verwendete Zeichenkodierung wie bei HTML4 über die Meta-Angabe eingegeben werden.

Auswahl der Zeichenkodierung

Welche Zeichenkodierung man verwendet, hängt in erster Linie von der Sprache bzw. den Schriftzeichen ab, die man auf der Webseite verwenden möchte und wie die Daten anderweitig ausgelesen und verarbeitet werden. Inhalte von Webseiten können nämlich nicht nur im Browser betrachtet, sondern auch von anderen Programmen ausgelesen und verarbeitet werden, z.B. Auslesen der Daten eines Shops und Erstellen einer Rechnung als PDF-Dokument. In solchen Fällen muss in der gesamten Kette, von der Datenquelle bis zur Ausgabe, die richtige Zeichenkodierung eingestellt werden. Sofern man den Quellcode des Programms bearbeiten kann, ist das in der Regel unproblematisch und die Zeichenkodierung kann bei Bedarf angepasst werden.

Für den deutschen Raum wurden in der Vergangenheit vor allem die Zeichenkodierung ISO-8859-1 verwendet. Das hatte den Nachteil, dass der Zeichenvorrat nur 256 Zeichen umfasst. Viele Sonderzeichen mussten daher maskiert werden, damit man sie auf der Webseite anzeigen konnte. Beispielsweise ist das Euro-Zeichen (€) kein Bestandteil von ISO-8859-1 und muss mit &euro; maskiert werden, um es auf der Webseite anzuzeigen. Deshalb wird auf immer mehr Webseiten UTF-8 verwendet, da man damit so gut wie alle Zeichen von allen Sprachen der Welt verwenden kann, ohne sie maskieren zu müssen. Mit UTF-8 müssen lediglich HTML-Steuerzeichen wie &, < und > maskiert werden.