Von ASCII bis UTF-8 im Detail

Zeichensatz & Zeichenkodierung

Zeichen

Texte setzen sich aus Zeichen zusammen. Bekannte Zeichen sind die Klein- und Großbuchstaben (dazu gehören auch Umlaute, das scharfes S und die vielen Buchstaben und Schriftzeichen aus anderen Sprachen) sowie viele Sonderzeichen wie zum Beispiel §, €, $, ⨯, √, ∈ oder Ø.

Randbemerkung nur für Detailverliebte:
Das Neue-Zeile-Zeichen habe ich hier nicht genannt, weil das zwar auf den meisten Platformen ein Einzelzeichen ist, allerdings unter Windows traditionell aus den zwei Zeichen Wagenrücklauf und Zeilenvorschub zusammengesetzt wird. Mehr dazu auf Wikipedia.)

Zeichensatz

Ein Zeichensatz, englisch Character Set, ist einfach nur eine Liste von Zeichen. Man könnte z.B. einen Zeichensatz mit Namen „ALPHABET KLEIN” erfinden, in dem nur die Kleinbuchstaben a bis z enthalten sind.

Es gibt etliche standardisierte Zeichensätze. Ein sehr beschränkter Zeichensatz liegt dem ASCII-Kodierungsschema zugrunde, der nur 128 Zeichen (davon auch noch 33 nicht-druckbare Steuerzeichen) umfasst. Dieser Zeichensatz, dessen Name mit der dazugehörigen Zeichenkodierung (s.u.) identisch ist, deckt gerade einmal das Nötigste ab: Englisches Alphabet, Ziffern und ein paar Satz- und Sonderzeichen. Im Gegensatz dazu umfasst Unicode über 100.000 Zeichen. Damit sind praktisch alle Zeichen aller Sprachen dieser Welt sowie eine Menge graphischer Symbole erfasst. Es kommen hier und da auch neue Zeichen hinzu, wie zum Beispiel diverse Emoticons. Das System hat Platz für über eine Million Zeichen, also darf das Unicode Consortium auch in Zukunft kreativ bleiben.

Computersysteme unterstützen heute meist sehr umfangreiche Zeichensätze; erlauben also die Ein- und Ausgabe vieler verschiedener Zeichen.

Die Zeichen eines Zeichensatzes sind durchnummeriert. Das muss aber nicht heißen, dass der Computer die Zeichen mit ihrer laufenden Nummer im Zeichensatz bearbeitet. Das geht bei einfachen Zeichensätzen wie ASCII. Bei Unicode musste man sich etwas anderes einfallen lassen. Das hat im Wesentlichen zwei Gründe: Erstens wollte bei den Grundlegenden Zeichen (Alphabet, Ziffern, einfache Satzzeichen etc.) mit ASCII kompatibel bleiben und zweitens wollte man die Dateien nicht unnötig groß werden lassen. Das wird vielleicht auf den nächsten Seiten noch klarer.

Es ist also dem Zeichensatz selbst nicht eigen, als welcher Zahlenwert die einzelnen Zeichen im Computer verarbeitet werden. Dafür ist nämlich Zeichenkodierung da.

Zeichenkodierung

Ein Computer arbeitet nicht mit Zeichen, sondern mit Zahlenwerten. (Genau genommen arbeitet er mit Bitfolgen, aber das braucht uns jetzt nicht zu interessieren.)

Wenn der Computer ein Zeichen verarbeiten soll, dann muss das Zeichen in eine Zahl umgewandelt werden. Dazu muss man definieren, welcher Zahlenwert für welches Zeichen steht. Genau das macht eine Zeichenkodierung: Eine Zeichenkodierung, englisch Character Encoding, ist eine Liste, die jedem einzelnen Zeichen eines Zeichensatzes eine Zahl zuordnet.

Ein einfaches Beispiel für eine Zeichenkodierung ist ASCII. Am Beispiel:
Nehmen wir an, das System ist so eingestellt, dass es den Zeichensatz ASCII verwenden soll. Nun tippt jemand den Buchstaben A ein und dieser soll auf dem Bildschirm erscheinen. Für den Computer heißt das: Es wurde das der Zahl 65 entsprechende Zeichen eingegeben und soll nun auf dem Bildschirm angezeigt werden. Wenn das System auf den Zeichensatz ASCII (oder einen anderen der vielen Zeichensätze, bei denen die 65 dem A entspricht) eingestellt ist, wird ein A auf dem Bildschirm erscheinen.

Für die Zeichen des Unicode-Zeichensatzes gibt es verschiedene Zeichenkodierungen, die alle je nach Anwendungsbereich ihre Vorteile haben. Sie heißen UCS‑2 (unvollständig), UCS‑4, UTF‑16, UTF‑16LE, UTF‑16BE, UTF‑32, UTF‑32LE, UTF‑32BE, UTF‑8. Letzterer ist der eleganteste von allen und um diesen soll es auf diesen Seiten gehen.

→ Teil 2

© Hermann Faß, 2013