Von ASCII bis UTF-8 im Detail

Unicode & UTF-8

Ein einziger, riesiger Zeichensatz

In Teil 3 wurde dargelegt, dass Zeichensätze mit 256 Zeichen heute oft nicht mehr ausreichen.

Web-Experten mögen einwenden, dass es in ihrem Bereich einen Ausweg gibt, nämlich sogenannte HTML-Entitäten. Dabei wird dann z.B. ein A-Umlaut (Ä) durch die Sequenz Ä dargestellt oder das Delta-Zeichen (Δ) als Δ. Das ist richtig, aber es verlangt dem Autoren einiges ab. Besser ist es, wenn man einfach mit der Tastaturbelegung der Wahl schreiben kann. Zudem gibt es noch andere Umgebungen als das Web, in denen Texte erfasst werden und wo es keine HTML-Entitäten gibt.

Hier kommt also der Unicode-Standard als Lösung für die benannten Einschränkungen.

Der Unicode-Standard bietet folgendes:

Unicode-Zeichenkodierungen

Wie erwähnt sieht Unicode mehrere Kodierungen vor. Da der Sinn von Unicode ist, viel mehr als 256 Zeichen abbilden zu können, reicht ein Byte (also acht Bit) pro Zeichen nicht aus, weil ein Byte ja nur 256 verschiedene Werte (0 bis 255) darstellen kann.

Die offensichtliche Lösung ist hier: Wir kodieren jedes Zeichen in mehreren Byte. Zum Beispiel kann man mit zwei Byte, also 16 Bit, 65.536 verschiedene Zahlenwerte kombinieren. Damit lassen sich dann ebenso viele Zeichen kodieren. In vier Byte ließen sich sogar über 4 Millionen Zeichen kodieren.

Das hat aber zwei Nachteile: Erstens werden die Dateien größer. Wenn für jedes Zeichen zwei (vier) Byte verwendet werden, wird die Datei nun mal doppelt (viermal) so viele Byte haben wie bei einer einfachen herkömmlichen Ein-Byte-Kodierung wie ASCII. Zweitens sind diese Kodierungen nicht mehr mit der ASCII-Kodierung kompatibel: Selbst, wenn man den Buchstaben A auch hier durch die Zahl 65 darstellen will, kann man das zweite Byte für dieses Zeichen nicht einfach auslassen. Stattdessen fügt man eine Null (bzw. bei vier Byte pro Zeichen drei Nullen) ein, damit alle Zeichen die gleiche Länge (Menge an Bytes) einnehmen. Sonst könnte die Software zum Lesen der Datei ja nicht wissen, wo ein Zeichen aufhört und das nächste beginnt.

Die Eleganz der Zeichenkodierung UTF‑8 darf hier, sozusagen als Vorgriff erwähnt werden:

UTF steht für Unicode Transformation Format und bezeichnet Kodierungen für den Unicode-Zeichensatz. Während einige UTF-Standards mit festen Bytelängen der Werte arbeiten, arbeitet UTF‑8 anders. Die Basis-Zeichen aus dem ASCII-Zeichensatz werden exakt wie bei ASCII, also mit einem Byte pro Zeichen, kodiert. Darüber hinaus gibt es Zeichen, die in zwei oder mehr Byte kodiert werden.

Wie das gelöst wurde, ist auf den folgenden drei Seiten detailliert und leicht verständlich erklärt.

Teil 3 ←→ Teil 5

© Hermann Faß, 2013