Unicode-normaliseerder

Dezelfde zichtbare tekenreeks kan als verschillende byte-sequenties worden opgeslagen, afhankelijk van of een accent bestaat als één codepunt of als een letter plus een combinerend teken. Deze normaliseerder zet tekst om tussen de vier Unicode-normalisatievormen (NFC, NFD, NFKC, NFKD), zodat uw tekenreeksen schoon vergelijkbaar zijn in databases, zoekindexen, deduplicatiescripts en regex-matches.

Hoe u Unicode-tekst normaliseert

  1. 1

    Plak uw invoer

    Voeg de tekenreeks toe: letters met accenten, CJK-tekst, ligaturen, alles wat inconsistent aanvoelt.

  2. 2

    Kies een vorm

    Kies NFC (samengesteld, de gebruikelijke webvorm), NFD (ontbonden), NFKC (compatibel samengesteld) of NFKD (compatibel ontbonden).

  3. 3

    Vergelijk de aantallen

    De tool meldt het aantal tekens (codepunten) en de bytelengte voor en na, zodat u ziet of de vorm de tekenreeks korter of langer maakte.

  4. 4

    Kopieer de genormaliseerde uitvoer

    Gebruik het resultaat in uw database, API-payload, sluggenerator of testfixture.

De vier vormen en wanneer u elke gebruikt

Unicode-normalisatie is gedefinieerd door de standaardbijlage UAX #15. De vier vormen verschillen langs twee assen: canoniek versus compatibiliteit, en samengesteld versus ontbonden.

Referentie naast elkaar

Vorm Samenstelling Toewijzing Wanneer gebruiken
NFC Samengesteld Alleen canoniek Standaard voor webinhoud, databases, bestandsnamen
NFD Ontbonden Alleen canoniek Tekstverwerking die accenten per teken verwijdert
NFKC Samengesteld Inclusief compat. Zoeken, identifiers, spamfilters, weergavevouwing
NFKD Ontbonden Inclusief compat. Agressieve normalisatie voor het verwijderen van diakritische tekens

Canonieke vormen behouden de betekenis

Typ é en wissel van vorm. NFC meldt 1 teken en 2 bytes (het enkele codepunt U+00E9), terwijl NFD 2 tekens en 3 bytes meldt (een gewone e gevolgd door een combinerend accent aigu, U+0301). Beide zien er op het scherm identiek uit maar zijn verschillende byte-sequenties, en juist dat verschil lost normalisatie op. Canonieke vormen herschikken alleen de bytes, dus é betekent in beide vormen altijd de letter e met accent aigu.

Wat “compatibiliteit” werkelijk verandert

De K-vormen (NFKC, NFKD) herschrijven ook tekens die verwant lijken maar andere opmaak dragen. Dit gaat met verlies: u krijgt het origineel niet terug. Bijvoorbeeld:

  • fi (U+FB01, Latijnse kleine ligatuur fi) wordt fi (twee letters)
  • ① (U+2460, omcirkeld cijfer één) wordt 1
  • ㌀ (U+3300, het CJK-vierkant “apaato”) wordt アパート
  • Volledige breedte A (U+FF21) wordt A

Dat is krachtig voor zoeken en deduplicatie maar destructief voor typografie, dus grijp alleen naar de K-vormen wanneer visuele getrouwheid er niet toe doet.

Een praktische regel

  • Bewaar gebruikersinhoud in NFC.
  • Vergelijk identifiers in NFC zodat café geschreven als één codepunt en café geschreven als e + U+0301 overeenkomen; stap over op NFKC wanneer u ook wilt dat fi en fi, of volledige-breedte A en A, als gelijk worden vergeleken, zoals de identifierregels in UAX #31 doen.
  • Maak accentloze slugs door te normaliseren naar NFD en het blok combinerende tekens U+0300 tot U+036F te verwijderen.

Veelgestelde vragen

Meestal betekent het dat uw invoer al in de doelvorm was. Plak tekst die bronnen combineert (een Mac-bestandsnaam, een gekopieerd PDF-fragment, een rij uit een oude database) en u ziet veel eerder het aantal tekens en bytes veranderen.

Voor weergave-URL’s: NFC. Voor slugs waarin u pure ASCII wilt, normaliseer naar NFD, verwijder de combinerende tekens met een regex op U+0300 tot U+036F en zet daarna alles in kleine letters. NFKD is een alternatief wanneer u ook ligaturen en omcirkelde cijfers wilt samenvouwen.

Canonieke vormen (NFC, NFD) veranderen de betekenis nooit, ze herschikken alleen bytes. Compatibiliteitsvormen (NFKC, NFKD) veranderen die wel: ligaturen splitsen, volledige-breedte letters vouwen samen en superscripten worden platgeslagen. Gebruik ze alleen wanneer dat is wat u wilt.

De normalisatie draait op onze server via de PHP-klasse Normalizer en het resultaat komt terug in hetzelfde verzoek; uw tekst wordt niet opgeslagen. We loggen alleen een anonieme gebeurtenis die aangeeft welke vorm is toegepast, nooit de inhoud zelf.

Gerelateerde tools

Tool beschikbaar in andere talen