Text & Code / Ratgeber

Unicode-Codepoints, UTF-8-Bytes und Normalisierung

Ein sichtbares Zeichen, ein Unicode-Codepoint und ein gespeichertes Byte hängen zusammen, sind aber nicht dieselbe Texteinheit.

Drei Ebenen eines Textwerts

Menschen sehen eine Folge sichtbarer Zeichen, manchmal mit einem Zeichen, das sich mit dem vorherigen Buchstaben verbindet. Unicode ordnet abstrakten Zeichen Codepoints zu. Eine Zeichenkodierung wie UTF-8 bildet diese Codepoints für Speicherung oder Übertragung auf Bytes ab. Ein sichtbares Zeichen kann mehrere Codepoints umfassen, und ein Codepoint kann mehrere UTF-8-Bytes benötigen. Eine Bytezahl ist folglich nicht unbedingt die Anzahl von Buchstaben oder wahrgenommenen Zeichen. Das Werkzeug Text zu Codepoints zeigt Unicode-Werte einer Zeichenfolge; Text zu UTF-8-Bytes zeigt eine andere Ebene. Beide Ansichten helfen bei der Fehlersuche, sind aber keine beliebig austauschbaren Schreibweisen ohne Rücksicht auf die Kodierung des Empfängers.

Zwei Schreibweisen von café

Das sichtbare Wort café kann mit dem einzelnen Codepoint U+00E9, LATEINISCHER KLEINBUCHSTABE E MIT AKUT, enden. Das ist die zusammengesetzte Form. Es kann ebenso mit U+0065, einem einfachen e, und danach U+0301, einem kombinierenden Akut, enden. Diese zweite Form hat einen zusätzlichen Codepoint, obwohl das Wort oft gleich aussieht. In UTF-8 besitzt die zusammengesetzte Variante die Hexadezimalbytes 63 61 66 C3 A9; die zerlegte Variante hat 63 61 66 65 CC 81. Es sind verschiedene Bytefolgen, deshalb können ein exakter Vergleich oder Hash verschieden ausfallen. NFC führt dieses Beispiel zur zusammengesetzten, NFD zur zerlegten Folge. Der eingebettete Konverter zeigt diese Bytes dezimal an: 99 97 102 195 169 für die zusammengesetzte und 99 97 102 101 204 129 für die zerlegte Form. Vergleichen Sie die Werte mit der Hexadezimalschreibweise oben.

Ein sichtbares Wort kann zwei Unicode- und zwei Bytefolgen haben.
  1. café: U+00E9 → endet mit C3 A9
  2. café: U+0065 U+0301 → endet mit 65 CC 81
  3. NFC ⇢ zusammengesetzt · NFD ⇢ zerlegt

Was Normalisierung bewirkt

Unicode-Normalisierung legt Darstellungen für kanonisch äquivalente Folgen fest. NFC setzt nach einer Zerlegung kanonisch zusammen, während NFD die kanonisch zerlegte Folge belässt. Das hilft vor dem Vergleich von Text aus unterschiedlichen Tastaturen, Dateien oder Systemen. Normalisierung übersetzt keine Wörter, entfernt keine Akzente und macht nicht alle optisch ähnlichen Zeichen gleich. Manche ähnlich aussehenden Zeichen gehören zu verschiedenen Schriften oder haben andere Bedeutungen. Die Kompatibilitätsformen NFKC und NFKD können noch mehr Darstellungsunterschiede verändern und passen nur, wenn Ihr Zweck solche Änderungen erlaubt. Verwenden Sie beim Vergleichen, Indizieren und Hashen dieselbe Normalisierungsregel; sonst laufen ähnlich wirkende Eingaben weiterhin auseinander.

Ein verlässlicher Diagnoseablauf

Wenn ein Name nicht übereinstimmt, sichern Sie zuerst die ursprüngliche Eingabe. Betrachten Sie die Codepoints: Ist der Akzent Teil eines vorgefertigten Zeichens oder eine separate kombinierende Marke? Prüfen Sie anschließend die UTF-8-Bytes, die tatsächlich über eine API übertragen oder in eine Datei geschrieben werden. Normalisieren Sie Kopien zu NFC und NFD, vergleichen Sie die Codepoints und dekodieren Sie die Bytefolge mit dem umgekehrten UTF-8-Werkzeug. Damit lässt sich prüfen, ob die Bytes gültig sind und den erwarteten Text ergeben. Dokumentieren Sie beim Dateiaustausch die Kodierung, statt überall denselben Standardwert anzunehmen. Ein Ersatzzeichen weist häufig auf ein Dekodierproblem hin; Normalisierung eines bereits falsch dekodierten Texts stellt verlorene Originalbytes nicht wieder her.

Die richtige Gleichheit prüfen

Für genaue Dateiintegrität, Hashes und Signaturen sind Bytes maßgeblich: Andere Normalisierung ändert die Bytes und damit den Hashwert. Bei benutzerorientierter Suche oder Dublettenerkennung kann ein Produkt zuvor normalisieren, sollte diese Regel aber erklären und testen. Groß- und Kleinschreibung, Satzzeichen, Leerzeichen und sprachabhängige Sortierung sind eigenständige Fragen; NFC entscheidet sie nicht. Ändern Sie die Schreibweise einer Person beim Anzeigen oder Exportieren nicht stillschweigend, wenn der Ablauf das nicht verlangt. Beginnen Sie unten mit café und betrachten Sie die UTF-8-Bytes. Fügen Sie danach eine Variante aus e und kombinierendem Akut in die Codepoint- und Normalisierungswerkzeuge ein. So sehen Sie, an welcher Stelle die kleine sichtbare Abweichung im Datenfluss entsteht.

Umrechner ausprobieren

Prüfen Sie die UTF-8-Bytes von café und danach e mit kombinierendem Akut.

UTF-8 serialisiert Unicode-Text in Bytes: ASCII benötigt eines, viele andere Zeichen benötigen zwei bis vier. Wandeln Sie lokal in Ihrem Browser um.

Vollständigen Umrechner öffnen

Weitere Ratgeber

Umrechnungsratgeber

Ratgeber entdecken