Von ASCII bis UTF-8 im Detail

Unicode & UTF-8 im Speziellen

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 den 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-Zeichensatz als Lösung für die benannten Einschränkungen.

Der Unicode-Zeichensatz bietet folgendes:

Besagte Zahlenwerte

Unicode-Zeichenkodierungen

Einen Zeichensatz zu definieren ist eine Sache. Damit man diesen in der Informationstechnik verarbeiten kann, muss man für jedes Zeichen eine Kodierung angeben: Welches elektronische Signal (welcher Zahlenwert oder welche Reihe von Zahlenwerten) soll für welches Zeichen (Unicode-Punkt) stehen?

Die erste Idee mag sein: Man kann doch einfach die jeweilige Nummer im Unicode-Zeichensatz verwenden. Leider ist es nicht so einfach. Nehmen wir zum Beispiel eine Zahlenfolge »65 65« (»0x41 0x41«). Damit könnte zweimal der Buchstabe A gemeint sein (Unicode-Punkt 0x41, d.h. 65) oder aber das koreanische Zeichen am Unicode-Punkt 0x4141. Es gibt verschiedene Ansätze, um dieses und andere Probleme zu lösen. Diesen entsprechend, 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:

Dennoch gibt es solche Kodierungen und auf der nächsten Seite sind diese auch kurz beschrieben. Im Wesentlichen wollen wir uns aber mit der wohl elegantesten Unicode-Zeichenkodierung, UTF‑8, beschäftigen.

UTF steht für Unicode Transformation Format und bezeichnet eine Gruppe von Kodierungen für den Unicode-Zeichensatz. Während einige UTF-Kodierungen 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 Bytes kodiert werden. Wenn man es mal weiß, scheint es verblüffend einfach.

Schauen wir auf den nächsten Seiten kurz in die Mehr-Byte-Kodierungen und die Lösung der von diesen aufgeworfenen Problemen, UTF‑8.

Teil 3 ←→ Teil 5

© Hermann Faß, 2013