Informatik

Unicode einfach erklärt: Codepunkte und UTF-8

Unicode einfach erklärt: Codepunkte und UTF-8
Unicode einfach erklärt: Codepunkte und UTF-8
Für Quiz, Lückentext, Lernkarten und Fortschritt ist JavaScript nötig. Alle Inhalte und Lösungen bleiben direkt lesbar.

Unicode gibt Zeichen eindeutige Codepunkte. Eine Kodierung wie UTF-8 übersetzt diese Codepunkte in Bytes, damit Computer Text speichern und übertragen können.

Auf dieser Seite lernst du, warum ASCII nicht für alle Sprachen reicht, wie Unicode Zeichen, Codepunkte und Glyphen trennt und wie du typische Darstellungsfehler erklärst.

Deine Lernziele

Hake ab, was du schon kannst — und komm am Ende hierher zurück!

Warum Text eine Zuordnung braucht

Ein Computer speichert zunächst nur unterscheidbare Bitmuster. Erst eine vereinbarte Zuordnung legt fest, ob ein Muster für eine Zahl, einen Buchstaben oder etwas anderes steht.

Ein Bit kann die Werte 0 und 1 annehmen. Mit $n$ Bit gibt es $2^n$ verschiedene Bitmuster.

Anzahl der Bitsmögliche Bitmuster
24
7128
8256
1665.536
Beispiel

Mit 3 Bit sind acht Muster möglich: von 000 bis 111. Eine vereinbarte Tabelle könnte etwa 000 dem Buchstaben A zuordnen. Ohne diese Tabelle bedeutet 000 nicht von selbst „A“.

Merke

Bits erhalten ihre Bedeutung erst durch ein vereinbartes Format und den passenden Kontext.

Teste dich
Frage 1 von 1LeichtWarum reicht das Bitmuster allein nicht aus, um ein Zeichen zu erkennen?
Lösung: Weil erst eine vereinbarte Zuordnung das Bitmuster mit einem Zeichen verbindet. — Eine Kodierung verbindet Zeichen beziehungsweise Codepunkte mit einer technischen Darstellung aus Bits und Bytes.
Wo ASCII an Grenzen stößt
Definition

ASCII

ASCII ist eine 7-Bit-Zeichenkodierung mit 128 Positionen. Sie enthält unter anderem englische Groß- und Kleinbuchstaben, Ziffern, Satzzeichen und Steuerzeichen.

Das große A hat in ASCII den Dezimalwert 65. Binär lautet dieser Wert 01000001. Obwohl ASCII nur 7 Bit benötigt, wird ein ASCII-Zeichen häufig in einem Byte gespeichert; das höchste Bit ist dann 0.

Beispiel

Für A zeigen drei Schreibweisen denselben Wert:

  • dezimal: 65
  • hexadezimal: 41
  • binär im Byte: 01000001

Die Darstellungen sehen verschieden aus, bezeichnen aber dieselbe ASCII-Position.

Deutsche Umlaute und viele andere Schriften fehlen in ASCII. Regionale 8-Bit-Zeichensätze erweiterten den Vorrat auf 256 Positionen, konnten aber weiterhin nicht alle Schriftsysteme gemeinsam abdecken.

Lückentext

Wähle in jeder Lücke die passende Form und prüfe anschließend deine Antworten.

ASCII nutzt Bit und hat deshalb Positionen. Eine 8-Bit-Erweiterung besitzt Positionen, löst das weltweite Zeichenproblem aber nicht.

Lösungen: Lücke 1: 7; Lücke 2: 128; Lücke 3: 256. Mit jedem zusätzlichen Bit verdoppelt sich die Zahl der möglichen Bitmuster: $2^7 = 128$ und $2^8 = 256$.
Wie Unicode Zeichen ordnet
Definition

Codepunkt

Ein Codepunkt ist die eindeutige Nummer, die Unicode einem abstrakten Zeichen zuordnet. Er wird hexadezimal mit U+ geschrieben, zum Beispiel U+00E4 für ä.

Unicode umfasst 17 Ebenen mit je 65.536 Positionen. Der gesamte Bereich reicht von U+0000 bis U+10FFFF. Nicht jede Position ist einem Zeichen zugewiesen.

Definition

Glyphe

Eine Glyphe ist die sichtbare Form eines Zeichens in einer Schriftart. Derselbe Codepunkt kann je nach Schriftart anders aussehen.

Du kannst die Ebenen so auseinanderhalten:

  1. Das Zeichen ist die abstrakte Bedeutung, etwa der Buchstabe A.
  2. Der Codepunkt ist seine Unicode-Nummer, bei A also U+0041.
  3. Die Zeichenkodierung erzeugt daraus eine speicherbare Bytefolge.
  4. Eine Schriftart liefert die sichtbare Glyphe.
Teste dich
Frage 1 von 1LeichtWas ist U+00E4 bei dem Zeichen ä?
Lösung: der Unicode-Codepunkt — U+00E4 bezeichnet den Codepunkt. Erst eine Kodierung wie UTF-8 erzeugt daraus Bytes.
Wie UTF-8 Codepunkte speichert
Definition

UTF-8

UTF-8 ist eine Unicode-Kodierung mit unterschiedlich langen Bytefolgen. ASCII-Zeichen benötigen ein Byte; andere Unicode-Zeichen benötigen je nach Codepunkt mehrere Bytes, höchstens vier.

Reine ASCII-Texte sind in UTF-8 bytegleich mit ASCII. Das macht UTF-8 abwärtskompatibel zu ASCII und für den Datenaustausch praktisch.

Verfahrentechnische EinheitSpeicheridee
UTF-88-Bit-Werte1 bis 4 Byte pro Codepunkt
UTF-1616-Bit-Werteein Wert in der BMP, sonst ein Surrogatpaar
UTF-3232-Bit-WerteCodepunkt auf 32 Bit aufgefüllt
Beispiel

In UTF-8 benötigt A ein Byte, weil es zum ASCII-Bereich gehört. Ein Regenschirmzeichen kann drei Byte benötigen. Die Anzahl der sichtbaren Zeichen und die Zahl der Bytes müssen deshalb nicht gleich sein.

Merke

Unicode ist der Zeichenstandard; UTF-8 ist eine Methode, Unicode-Codepunkte als Bytes zu speichern. Die beiden Begriffe sind nicht austauschbar.

Teste dich
Frage 1 von 1MittelEine UTF-8-Datei enthält zehn ASCII-Buchstaben. Was folgt für diese zehn Zeichen?
Lösung: Ihre UTF-8-Darstellung benötigt zusammen zehn Byte. — Für den ASCII-Bereich verwendet UTF-8 genau ein Byte pro Zeichen.
Wodurch Darstellungsfehler entstehen

Nicht jedes falsche Symbol hat dieselbe Ursache. Prüfe drei Fälle getrennt.

  • Falsche Dekodierung: Die gespeicherten Bytes sind vorhanden, werden aber nach einer unpassenden Kodierung gelesen. Dann kann Zeichensalat entstehen.
  • Begrenzte Zielkodierung: Ein Zeichen ist dort nicht darstellbar. Wird trotzdem gespeichert, kann es verloren gehen oder durch ein Fragezeichen ersetzt werden.
  • Fehlende Glyphe: Der Codepunkt ist korrekt gespeichert, aber die verwendete Schriftart besitzt keine passende sichtbare Form. Dann erscheint oft ein Ersatzsymbol.
Beispiel

Du speicherst ein Regenschirmzeichen in einer begrenzten Kodierung, die dieses Zeichen nicht enthält. Nach einer Warnung speicherst du trotzdem; beim erneuten Öffnen steht dort nur ?. Das Problem liegt nicht am Unicode-Standard, sondern an der ungeeigneten Zielkodierung und dem dadurch entstandenen Zeichenverlust.

Teste dich
Frage 1 von 1MittelEine Datei enthält den richtigen Unicode-Codepunkt, zeigt aber nur ein leeres Kästchen. Welche Ursache ist am wahrscheinlichsten?
Lösung: Der verwendeten Schriftart fehlt die passende Glyphe. — Ein vorhandener Codepunkt garantiert noch keine sichtbare Glyphe. Die Schriftart muss eine passende Darstellung enthalten oder das System muss einen Ersatzfont verwenden.
Wie du selbst codierst und decodierst

Für diese Übung gilt eine kleine, eigens vorgegebene Zeichentabelle. Sie ist kein Unicode-Ausschnitt, sondern zeigt das Grundprinzip einer Kodierung.

ZeichenCode
A00
B01
ä10
11
Beispiel

Codiere B A ☂.

  1. Suche jedes Zeichen einzeln in der Tabelle.
  2. B wird zu 01, A zu 00 und zu 11.
  3. Die codierte Folge lautet 01 00 11.

Zur Kontrolle decodierst du rückwärts: 01 ergibt B, 00 ergibt A und 11 ergibt .

Deine Aufgabe

  1. Decodiere 10 01 00.
  2. Erkläre, warum dieselbe Bitfolge ohne die Tabelle nicht eindeutig als Text verstanden werden kann.
Gut zu wissen

Lösung: 10 steht für ä, 01 für B und 00 für A. Das Ergebnis lautet äBA. Ohne die vereinbarte Tabelle fehlt die Zuordnung zwischen den Bitpaaren und den Zeichen; ein anderes Format könnte dieselben Muster anders deuten.

Teste dich
Frage 1 von 2MittelWelche Zeichenfolge gehört nach der Tabelle zu 00 11 01?
Lösung: A☂B — Decodiere von links nach rechts und ersetze jedes Bitpaar genau einmal mithilfe der Tabelle.
Frage 2 von 2SchwerEin anderes System ordnet 00 dem Zeichen B zu. Was zeigt das?
Lösung: Die Bedeutung eines Bitmusters hängt von der vereinbarten Zuordnung ab. — Bits tragen keine eingebaute Zeichenbedeutung. Sender und Empfänger müssen dasselbe Format verwenden.
Karteikasten
Karteikasten

Überlege zuerst selbst und drehe die Karte anschließend zum Prüfen um.

Alles auf einen Blick
Mindmap
  • Unicode-Text
    • Bedeutung
      • Zeichen
      • Codepunkt
    • Speicherung
      • UTF-8-Bytefolge
      • andere UTF-Verfahren
    • Darstellung
      • Glyphe
      • Schriftart
    • Fehlerquellen
      • falsche Dekodierung
      • begrenzte Zielkodierung
      • fehlende Glyphe
Abschluss-Check
Teste dich
Frage 1 von 3LeichtWelche Aussage trennt Unicode und UTF-8 korrekt?
Lösung: Unicode ordnet Zeichen Codepunkte zu; UTF-8 speichert diese Codepunkte als Bytefolgen. — Denke an die Kette: Zeichen, Codepunkt, Kodierung, Bytefolge und schließlich Glyphe.
Frage 2 von 3MittelEin Text mit Umlauten wird mit der falschen Kodierung geöffnet und zeigt Zeichensalat. Was solltest du zuerst prüfen?
Lösung: Ob die Bytes mit derselben Kodierung decodiert werden, mit der sie gespeichert wurden. — Bei Zeichensalat sind die Bytes oft noch vorhanden, werden aber nach der falschen Regel gedeutet.
Frage 3 von 3SchwerEin Programm speichert A und in UTF-8. Welche Aussage ist sicher richtig?
Lösung: Beide Zeichen sind darstellbar, können aber unterschiedlich viele Bytes benötigen. — Unicode umfasst auch Symbole. UTF-8 verwendet für ASCII ein Byte und für andere Codepunkte je nach Bereich mehrere Bytes.

Du hast den Kern verstanden, wenn du die Kette Zeichen → Codepunkt → Bytefolge → Glyphe erklären und bei Fehlern die betroffene Ebene bestimmen kannst.

Passend dazu