Von ASCII bis UTF-8 im Detail

Ein (ganzes) Byte pro Zeichen

Ein Byte hat acht Bit

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 Oktett oder landläufig auch ein Byte. Wie wir oben gelesen haben, werden in ASCII nur die durch 7 Bit darstellbaren 128 Werte (0 bis 127) zur Zeichenkodierung verwendet. Das 8. Bit hatte früher bei einigen Rechnern eine besondere Funktion; andere setzten es einfach immer auf Null. Es wäre Verschwendung, das 8. Bit weiterhin einfach zu nullen. Wenn wir alle 8 Bit, also das ganze Byte nutzen, kann es pro Einheit 256 verschiedene Zahlenwerte (0 bis 255) annehmen. Wir können damit einen Zeichensatz von 256 Zeichen kodieren: Wir weisen den Zahlenwerten 128 bis 255 weitere Zeichen zu. So können wir Umlauten, Akzenten, Währungszeichen, Anführungszeichen, dem scharfen S und weiteren Sonderzeichen einen dieser in ASCII ungenutzten Zahlenwert zuordnen.

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; kein Wunder also, dass er sehr populär war.

Der Vollständigkeit halber:
Noch populärer wurde eine andere 1-Byte-Kodierung, die der Betriebssystem-Hersteller Microsoft auf der Basis von vorgenanntem Standard ISO 8859‑1 unter dem Namen »Windows code page 1252« auf seinen Systemen verwendete. Der Unterschied zum Standard sind ein paar zusätzliche Zeichen (meist Satzzeichen), mit denen ursprünglich für System-Steuerzeichen reservierte Werte belegt wurden. Der von offizieller Seite (IANA) freigegebene Name für diese Zeichenkodierung lautet »windows-1252«.

Einwand: Und als das Euro-Symbol (€) erfunden wurde? Da kam ein neuer Standard namens ISO 8859‑15 heraus, bei dem das Euro-Symbol den Wert bekam, den vorher das »allgemeinen Währungszeichen« (¤) hatte. Es war so unbedeutend, dass der Leser es wahrscheinlich gar nicht kennt. Es wurden noch ein paar weitere weniger bedeutende Zeichen z.B. gegen bis dahin fehlende Buchstaben aus Französisch und Finnisch ausgetauscht.
Auch in windows-1252 kam das Euro-Symbol hinzu. Hier wurde ein bis dahin noch gar nicht zugewiesener Zahlewert verwendet.

Interessant für Web-Leute:
Wie funktioniert das Euro-Zeichen in einer HTML-Seite, für die im Head-Teil als Kodierung ISO 8859‑1 angegeben ist?
Hier machen moderne Browser, was im HTML5-Standard empfohlen wird: Wo ISO 8859‑1 steht, interpretieren sie den Quelltext als windows-1252-kodiert - und windows-1252 hat ja das Euro-Zeichen. Weil ISO 8859‑1 die Basis von windows-1252 war, sind die anderen Zeichen kein Problem.

Zurück zu 1-Byte-Kodierung im Allgemeinen: Mit unseren westeuropäischen Buchstaben, Satzzeichen und den wichtigsten Symbolen waren die 256 zuweisbaren Werte dann auch erschöpft. Für die gar lustigen Buchstaben unserer polnischen Nachbarn war zum Beispiel kein Platz mehr in Latin‑1 und windows-1252. Den ost-europäischen Sprachen hatte man eine eigene Kodierung, nämlich 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.

ASCII-Kompatibilität

Es sei noch erwähnt, dass die ersten 128 Zeichen bei allen oben genannten Kodierungen gleich sind: Man hat sie so gelassen, wie sie bereits in ASCII definiert waren. Das hat sich bewährt. Es macht Dateien z.B. weniger anfällig, wenn sie von einer dieser Kodierung in eine andere überführt werden. Die durch die Zahlen 0 bis 127 repräsentierten Zeichen gehen dabei schon mal nicht kaputt. Eine Datei mit einem englischen Text sieht Byte für Byte exakt gleich aus, ob sie nun in ASCII, Latin‑1 oder Latin‑2 kodiert ist. Warum? Weil ein englischer Text nur aus den Buchstaben A bis Z sowie vielleicht Zahlen und normaler Interpunktion besteht. Alle diese Zeichen werden durch Zahlen im Bereich 0 bis 127 repräsentiert und in diesem Bereich gibt es keine Unterschiede. Die Unterschiede treten erst im Bereich ab Zeichen Nummer 128 auf, weil dort ja die jeweils länderspezifischen Zeichen kommen. Beispiel: Der Zahlenwert 179 repräsentiert in Latin‑1 eine hochgestellte 3 (wie in m³) und in Latin‑2 das kleine l mit Strich wie z.B. im Polnisch verwendet (ƚ).

Es gibt selbstverständlich auch Kodierungen, die nicht ASCII-kompatibel sind; bei denen die Zahlenwerte 0 bis 127 andere Zeichen repäsentieren als in ASCII. Als Beispiel sei hier EBCDIC genannt. Diese Kodierungen spielen heute, zumindest in meiner Welt, keine Rolle mehr.

Sind 256 Zeichen genug?

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

Teil 2 ←→ Teil 4

© Hermann Faß, 2013