Zeichenkodierung: Unicode und UTF-8 erklärt
Aktualisiert 2026-07-06
Du hast es gesehen: ein Name, der José lauten sollte, erscheint als José, oder ein Emoji wird zu einem Kästchen mit Fragezeichen. Dieser Salat hat einen Namen — Mojibake — und ist fast immer ein Missverhältnis der Zeichenkodierung. Dieser Ratgeber erklärt, was Zeichen, Unicode und UTF-8 wirklich sind, damit solche Fehler aufhören, rätselhaft zu sein.
Computer speichern Zahlen, keine Buchstaben
Auf der untersten Ebene speichert ein Computer nur Zahlen (Bytes). Um Text zu speichern, brauchen wir eine vereinbarte Tabelle, die jedes Zeichen einer Zahl zuordnet und wieder zurück. Diese Tabelle ist eine Zeichenkodierung. Schreibt ein Programm Text mit einer Tabelle und liest ein anderes ihn mit einer anderen, werden die Zahlen als falsche Zeichen interpretiert — und du bekommst Mojibake.
ASCII: der kleine Anfang
Die ursprüngliche weit verbreitete Kodierung ASCII definierte Zahlen für 128 Zeichen: das englische Alphabet, Ziffern, Satzzeichen und einige Steuercodes. Für Englisch genug, aber kein Platz für é, ü, ß, 你, 😀 oder die Zehntausenden Zeichen der Sprachen der Welt. Jahrzehntelang erfand jeder eigene inkompatible Erweiterungen, und genau deshalb brach Text, wenn er zwischen Systemen wanderte.
Unicode: eine Zahl für jedes Zeichen
Unicode ist die universelle Lösung: ein einziger Standard, der jedem Zeichen jedes Schriftsystems, plus Symbolen und Emoji, eine eindeutige Zahl zuweist — einen Codepoint. Codepoints werden als U+ gefolgt von einer Hexzahl geschrieben:
A → U+0041 é → U+00E9 你 → U+4F60 😀 → U+1F600
Entscheidend: Unicode definiert die Zahlen, aber nicht, wie man sie als Bytes speichert. Das ist eine separate Entscheidung — und da kommt UTF-8 ins Spiel.
UTF-8: wie Unicode zu Bytes wird
UTF-8 ist eine Art, Unicode-Codepoints in Bytes zu kodieren, und diejenige, die das Web überwältigend nutzt. Sein cleverer Entwurf ist, dass es variabel lang ist:
- Die 128 ASCII-Zeichen brauchen je 1 Byte — UTF-8 ist also abwärtskompatibel mit ASCII.
- Die meisten Latein-mit-Akzent- sowie griechischen/kyrillischen Zeichen brauchen 2 Bytes.
- Die meisten anderen Schriften, darunter Chinesisch, Japanisch und Koreanisch, brauchen 3 Bytes.
- Emoji und seltenere Zeichen brauchen 4 Bytes.
Deshalb ist eine „100-Zeichen“-Zeichenkette nicht immer 100 Bytes: ein Zeichen kann mehrere Bytes sein. Es erklärt auch den klassischen José-Fehler — das sind die UTF-8-Bytes für é, die fälschlich Byte für Byte als ältere westliche Kodierung gelesen werden.
Zeichen, Codepoints und Bytes
Drei verwandte, aber unterschiedliche Begriffe bringen Leute ständig durcheinander:
- Zeichen (Character) — was ein Mensch sieht (der Buchstabe
é). - Codepoint — die Unicode-Zahl dafür (
U+00E9). - Byte — wie es gespeichert wird (in UTF-8 die zwei Bytes
0xC3 0xA9).
Einen ausgeschriebenen Codepoint zu sehen, ist oft der schnellste Weg, ein Textproblem zu diagnostizieren — etwa ein „Leerzeichen“, das sich als geschütztes Leerzeichen (U+00A0) entpuppt. Unser Unicode-Konverter zeigt die Codepoints hinter beliebigem Text und wandelt zwischen Zeichen und Escape-Sequenzen um.
Wie man Mojibake vermeidet
- Nutze überall UTF-8. Speichere Dateien als UTF-8 und deklariere es — auf Webseiten
<meta charset="utf-8">; in HTTP dasContent-Type-Charset; in Datenbanken eine UTF-8-Kollation. - Halte es durchgängig konsistent. Die meisten Beschädigungen entstehen an einer Grenze, wo eine Seite eine andere Kodierung annimmt.
- Maskiere für den richtigen Kontext. Um Sonderzeichen sicher in HTML zu setzen, nutze HTML-Entitäten; um sie in eine URL zu setzen, URL-Kodierung.
Die Kurzfassung: Unicode gibt jedem Zeichen eine Zahl, UTF-8 verwandelt diese Zahlen in Bytes, und wenn sich alle darauf einigen, UTF-8 zu nutzen, hört Text auf, kaputtzugehen.
Mehr zu Datenformate & Kodierung
Alle Datenformate & Kodierung-Ratgeber ansehen →In diesem Ratgeber erwähnte Tools