Warum identisch aussehender Text es nicht ist
Unicode hat mehr als 150.000 Zeichen, und viele davon sind unsichtbar oder sehen genau wie ein anderes aus. Eine von einer Webseite, einem PDF oder einer Chat-App kopierte Zeichenkette kann Zero-Width-Spaces, geschützte Leerzeichen, weiche Trennstriche, Richtungsmarken und eine Byte-Order-Mark enthalten; nichts davon ist auf dem Bildschirm zu sehen, alles lässt Vergleiche, Logins und Datenbankabfragen scheitern. Doppelgänger sind schlimmer: Das kyrillische а (U+0430) ist in den meisten Schriften pixelgleich mit dem lateinischen a (U+0061), was die Grundlage von Homograph-Phishing-Domains und von „Warum existiert dieser Benutzername nicht“-Tickets ist.
Was der Inspektor meldet
- Codepunkt (
U+00E9): die Nummer, die Unicode vergibt. Ein sichtbares Zeichen kann ein Codepunkt sein (évorkomponiert) oder zwei (e+ kombinierender Akut), das ist der Unterschied NFC/NFD. - UTF-8-Bytes: 1–4 Bytes pro Codepunkt; was in Dateien, Datenbanken und HTTP gespeichert wird. UTF-16-Einheiten: was JavaScript- und Java-Strings zählen; Emoji brauchen zwei.
- Grapheme: was ein Mensch als ein Zeichen sieht. Ein Flaggen-Emoji ist ein Graphem, zwei Codepunkte, acht UTF-8-Bytes.
Normalisierung
NFC setzt Basiszeichen + Markierung zu einem einzelnen Codepunkt zusammen, wo einer existiert; NFD zerlegt. Vergleichen und speichern Sie Text in NFC (macOS-Dateinamen kommen in NFD an, ein klassischer Sync-Fehler). NFKC und NFKD falten zusätzlich Kompatibilitätszeichen: Ligaturen, vollbreite Buchstaben, Hochstellungen und römische Zahlzeichen werden zu ihren einfachen Entsprechungen, was man für Suche und Bezeichner will, was aber Formatierung zerstört.
Eingaben bereinigen
Für Bezeichner, Benutzernamen und Domains: nach NFKC normalisieren, die Zeichen entfernen, die dieses Tool als unsichtbar markiert, und bei gemischten Schriften ablehnen oder warnen. Die Option „Unsichtbare entfernen“ liefert die bereinigte Zeichenkette zum Kopieren.
Fragen
Was ist ein Zero-Width-Space?
U+200B, ein Zeichen ohne Breite, das einen möglichen Zeilenumbruch markiert. Es überlebt Kopieren und Einfügen und ist in fast jedem Editor unsichtbar. Textverarbeitungen, Slack und manche Webseiten fügen es ein; dieser Inspektor markiert jedes.
Warum zählt „é“ manchmal als zwei Zeichen?
Es kann als der einzelne Codepunkt U+00E9 oder als U+0065 e gefolgt von U+0301 kombinierender Akut geschrieben werden. Beide sehen gleich aus und sind ungleich, solange nicht beide nach NFC normalisiert sind.
Wie tippe ich ein Zeichen per Codepunkt?
Linux (GTK): Strg+Umschalt+U, dann das Hex, dann Leertaste. macOS: die Eingabequelle „Unicode Hex-Eingabe“ aktivieren und Wahltaste halten. Windows: das Hex tippen und in Word oder WordPad Alt+X drücken. Im Code: "\u{1F600}" (JS), "\N{...}" oder "\U0001F600" (Python).
Was ist der Unterschied zwischen UTF-8 und Unicode?
Unicode ist der Katalog der Zeichen und ihrer Nummern. UTF-8 (und UTF-16, UTF-32) ist eine Art, diese Nummern als Bytes zu schreiben. UTF-8 ist die im Web überall verwendete.