Unicode-Normalisierer

Dieselbe sichtbare Zeichenfolge kann als unterschiedliche Byte-Sequenz gespeichert werden, je nachdem, ob ein Akzent als ein einzelner Codepunkt oder als Buchstabe plus kombinierendes Zeichen vorliegt. Dieser Normalisierer wandelt Text zwischen den vier Unicode-Normalisierungsformen (NFC, NFD, NFKC, NFKD) um, damit Ihre Zeichenfolgen in Datenbanken, Suchindizes, Deduplizierungsskripten und Regex-Abgleichen sauber verglichen werden.

So normalisieren Sie Unicode-Text

  1. 1

    Eingabe einfügen

    Fügen Sie die Zeichenfolge ein: akzentuierte Buchstaben, CJK-Text, Ligaturen, alles, was inkonsistent wirkt.

  2. 2

    Eine Form wählen

    Wählen Sie NFC (komponiert, die übliche Webform), NFD (dekomponiert), NFKC (kompatibel komponiert) oder NFKD (kompatibel dekomponiert).

  3. 3

    Die Werte vergleichen

    Das Tool nennt die Zeichenzahl (Codepunkte) und die Byte-Länge davor und danach, damit Sie sehen, ob die Form die Zeichenfolge verkürzt oder verlängert hat.

  4. 4

    Die normalisierte Ausgabe kopieren

    Verwenden Sie das Ergebnis in Ihrer Datenbank, API-Nutzlast, im Slug-Generator oder in einer Testfixture.

Die vier Formen und wann man welche verwendet

Die Unicode-Normalisierung ist im Standardanhang UAX #15 definiert. Die vier Formen unterscheiden sich entlang zweier Achsen: kanonisch gegenüber kompatibel und komponiert gegenüber dekomponiert.

Direkter Vergleich

Form Komposition Zuordnung Wann zu verwenden
NFC Komponiert Nur kanonisch Standard für Webinhalte, Datenbanken, Dateinamen
NFD Dekomponiert Nur kanonisch Textverarbeitung, die Akzente pro Zeichen entfernt
NFKC Komponiert Inkl. Kompatib. Suche, Bezeichner, Spamfilter, Anzeige-Faltung
NFKD Dekomponiert Inkl. Kompatib. Aggressive Normalisierung vor dem Entfernen von Diakritika

Kanonische Formen bewahren die Bedeutung

Tippen Sie é und wechseln Sie die Formen. NFC meldet 1 Zeichen und 2 Bytes (den einzelnen Codepunkt U+00E9), NFD dagegen 2 Zeichen und 3 Bytes (ein einfaches e gefolgt von einem kombinierenden Akut, U+0301). Beide sehen auf dem Bildschirm identisch aus, sind aber unterschiedliche Byte-Sequenzen, und genau diese Diskrepanz behebt die Normalisierung. Kanonische Formen ordnen nur die Bytes neu an, sodass é in beiden Formen immer den Buchstaben e mit Akut bedeutet.

Was “Kompatibilität” tatsächlich ändert

Die K-Formen (NFKC, NFKD) schreiben außerdem Zeichen um, die verwandt aussehen, aber eine andere Formatierung tragen. Das ist verlustbehaftet: Sie erhalten das Original nicht zurück. Zum Beispiel:

  • fi (U+FB01, lateinische kleine Ligatur fi) wird zu fi (zwei Buchstaben)
  • ① (U+2460, umkreiste Ziffer eins) wird zu 1
  • ㌀ (U+3300, das CJK-Quadrat “apaato”) wird zu アパート
  • Vollbreites A (U+FF21) wird zu A

Das ist mächtig für Suche und Deduplizierung, aber destruktiv für die Typografie. Greifen Sie also nur zu den K-Formen, wenn die visuelle Treue keine Rolle spielt.

Eine praktische Regel

  • Speichern Sie Nutzerinhalte in NFC.
  • Vergleichen Sie Bezeichner in NFC, damit café als ein Codepunkt und café als e + U+0301 übereinstimmen; wechseln Sie zu NFKC, wenn auch fi und fi oder vollbreites A und A gleich sein sollen, wie es die Bezeichnerregeln in UAX #31 vorsehen.
  • Erzeugen Sie akzentfreie Slugs, indem Sie auf NFD normalisieren und den Block der kombinierenden Zeichen U+0300 bis U+036F entfernen.

Häufig gestellte Fragen

In der Regel bedeutet das, dass Ihre Eingabe bereits in der Zielform vorlag. Fügen Sie Text ein, der Quellen mischt (ein Mac-Dateiname, ein kopierter PDF-Ausschnitt, eine Zeile aus einer alten Datenbank), und es ist viel wahrscheinlicher, dass sich Zeichen- und Byte-Zahl ändern.

Für Anzeige-URLs NFC. Für Slugs, bei denen Sie reines ASCII möchten, normalisieren Sie auf NFD, entfernen Sie die kombinierenden Zeichen mit einem Regex auf U+0300 bis U+036F und schreiben Sie dann alles klein. NFKD ist eine Alternative, wenn Sie auch Ligaturen und umkreiste Ziffern auflösen möchten.

Kanonische Formen (NFC, NFD) ändern niemals die Bedeutung, sie ordnen nur Bytes neu an. Kompatibilitätsformen (NFKC, NFKD) ändern sie sehr wohl: Ligaturen werden getrennt, vollbreite Buchstaben werden aufgelöst und Hochzahlen werden verflacht. Verwenden Sie sie nur, wenn genau das gewünscht ist.

Die Normalisierung läuft auf unserem Server über die PHP-Klasse Normalizer, und das Ergebnis kommt in derselben Anfrage zurück; Ihr Text wird nicht gespeichert. Wir protokollieren nur ein anonymes Ereignis, das festhält, welche Form angewendet wurde, niemals den Inhalt selbst.

Verwandte Tools

Tool in anderen Sprachen verfügbar