Hinter jedem Buchstaben, jedem Sonderzeichen und jedem Emoji auf deinem Bildschirm steckt eine Zahl. Damit Computer weltweit dieselben Texte korrekt darstellen können, gibt es Unicode – einen universellen Standard, der praktisch jedes Schriftzeichen der Welt einer eindeutigen Nummer zuordnet. Dieser Ratgeber erklärt, was Codepunkte, UTF-8-Bytes und HTML-Entities sind und warum es manchmal zu kaputten Zeichen kommt.
Was ist Unicode?
Früher hatte jedes System eigene Zeichentabellen: ASCII deckte nur 128 Zeichen ab (genug für Englisch), und für Umlaute oder kyrillische Schrift gab es Dutzende inkompatibler Erweiterungen wie Latin-1 oder Windows-1252. Das führte zu chaotischen Darstellungsfehlern, sobald Texte zwischen Systemen wanderten.
Unicode löst dieses Problem, indem es jedem Zeichen einen eindeutigen Codepunkt gibt – eine Nummer, die unabhängig von Plattform, Programm und Sprache gilt. Der Buchstabe "A" hat den Codepunkt U+0041, das deutsche "ä" U+00E4, und das Herz-Emoji 💚 liegt bei U+1F49A.
Wenn du wissen willst, welche Nummer, welche HTML-Entity und welche Bytes hinter einem bestimmten Zeichen stecken, hilft dir das Zeichen-Info-Tool: Du gibst ein beliebiges Zeichen ein – Buchstabe, Sonderzeichen oder Emoji – und siehst sofort Codepunkt, HTML-Entity und UTF-8-Bytes.
Codepunkt vs. Encoding
Ein wichtiger Unterschied, der oft verwechselt wird: Der Codepunkt ist die abstrakte Nummer eines Zeichens (z. B. U+00E4 für ä). Das Encoding bestimmt, wie diese Nummer als konkrete Bytes gespeichert wird. Unicode definiert die Codepunkte, UTF-8 (und andere) definieren die Speicherung.
UTF-8 – der De-facto-Standard
UTF-8 ist die heute dominierende Kodierung im Web. Sie ist variabel: Ein Zeichen belegt zwischen 1 und 4 Bytes.
- 1 Byte für klassische ASCII-Zeichen (A–Z, a–z, Ziffern). Dadurch ist UTF-8 abwärtskompatibel zu ASCII.
- 2 Bytes für die meisten europäischen Sonderzeichen, etwa ä, ö, ü, é, ß.
- 3 Bytes für viele weitere Schriftsysteme und Symbole.
- 4 Bytes für Emojis und seltene Zeichen aus den höheren Unicode-Ebenen.
Genau deshalb ist die Byte-Länge eines Textes nicht gleich der Zeichenanzahl. Das Wort "Café" hat vier Zeichen, aber in UTF-8 fünf Bytes, weil das "é" zwei Bytes belegt.
HTML-Entities
In HTML haben manche Zeichen eine Sonderbedeutung – das spitze Klammerzeichen < beginnt zum Beispiel ein Tag. Damit solche Zeichen als Text und nicht als Code interpretiert werden, nutzt man HTML-Entities. Es gibt zwei Formen:
- Benannte Entities:
&für &,<für <,©für ©. - Numerische Entities: Der Codepunkt direkt, dezimal als
äoder hexadezimal alsä– beides ergibt ä.
Numerische Entities funktionieren für jedes Unicode-Zeichen, auch wenn es keinen benannten Kurznamen hat.
Warum verrutschen Emojis und Umlaute manchmal?
Das berüchtigte "ä" statt "ä" oder das Fragezeichen-im-Rechteck-Symbol entsteht fast immer durch ein Encoding-Missverständnis: Ein Text wird in UTF-8 gespeichert, aber als Latin-1 gelesen (oder umgekehrt). Die Bytes sind dann technisch noch da, werden aber falsch interpretiert.
Bei Emojis kommt eine weitere Besonderheit hinzu: Viele moderne Emojis bestehen aus mehreren Codepunkten, die per Zero-Width-Joiner verbunden werden. Das Familien-Emoji etwa ist eine Kette aus mehreren Personen-Emojis. Zählt ein System nur Codepunkte, kommt es bei der Längenbestimmung leicht durcheinander – ein häufiger Grund, warum Zeichenlimits in sozialen Netzwerken bei Emojis seltsam wirken.
Praktische Anwendungen
- Datenbanken: Spalten sollten als
utf8mb4angelegt werden, sonst speichert MySQL keine 4-Byte-Emojis. - Formulare und Limits: Wenn du prüfen willst, ob ein Text in ein Zeichenlimit passt, hilft der Zeichenlimit Prüfer.
- Dateien: Speichere Quelltext immer ohne BOM in UTF-8, um Inkompatibilitäten zu vermeiden.
Weitere Entwickler- und Textwerkzeuge findest du gesammelt unter kotsch.tech/webtools.
Häufige Fragen
Wie viele Zeichen umfasst Unicode?
Unicode definiert über 1,1 Million mögliche Codepunkte, von denen bislang rund 150.000 Zeichen tatsächlich vergeben sind – inklusive historischer Schriften und Emojis.
Ist UTF-8 dasselbe wie Unicode?
Nein. Unicode legt die Codepunkte fest, UTF-8 ist eine von mehreren Methoden, diese Codepunkte als Bytes zu speichern. Es gibt auch UTF-16 und UTF-32.
Warum ist "ß" so problematisch?
Das ß hat eigene Codepunkte für Klein- und seit 2017 auch Großschreibung (ẞ). In manchen Kontexten wird es zu "ss" transliteriert, was die Länge des Textes verändert.