Normaliseur Unicode

La même chaîne visible peut être stockée sous différentes séquences d’octets selon qu’un accent existe comme un seul point de code ou comme une lettre plus un signe de combinaison. Ce normaliseur convertit le texte entre les quatre formes de normalisation Unicode (NFC, NFD, NFKC, NFKD) afin que vos chaînes se comparent proprement dans les bases de données, les index de recherche, les scripts de déduplication et les correspondances regex.

Comment normaliser le texte Unicode

  1. 1

    Collez votre entrée

    Insérez la chaîne : lettres accentuées, texte CJK, ligatures, tout ce qui semble incohérent.

  2. 2

    Choisissez une forme

    Choisissez NFC (composée, la forme web habituelle), NFD (décomposée), NFKC (composée de compatibilité) ou NFKD (décomposée de compatibilité).

  3. 3

    Comparez les décomptes

    L'outil indique le nombre de caractères (points de code) et la longueur en octets avant et après, pour que vous voyiez si la forme a raccourci ou allongé la chaîne.

  4. 4

    Copiez la sortie normalisée

    Utilisez le résultat dans votre base de données, votre charge utile API, votre générateur de slugs ou votre fixture de test.

Les quatre formes et quand utiliser chacune

La normalisation Unicode est définie par l’annexe standard UAX #15. Les quatre formes diffèrent selon deux axes : canonique face à compatibilité, et composée face à décomposée.

Référence côte à côte

Forme Composition Correspondance Quand l’utiliser
NFC Composée Canonique seule Par défaut pour le contenu web, les bases de données, les noms de fichiers
NFD Décomposée Canonique seule Traitement de texte qui retire les accents par caractère
NFKC Composée Inclut compat. Recherche, identifiants, filtres anti-spam, pliage d’affichage
NFKD Décomposée Inclut compat. Normalisation agressive avant le retrait des diacritiques

Les formes canoniques préservent le sens

Tapez é et changez de forme. NFC indique 1 caractère et 2 octets (le point de code unique U+00E9), tandis que NFD indique 2 caractères et 3 octets (un e simple suivi d’un accent aigu de combinaison, U+0301). Les deux paraissent identiques à l’écran mais sont des séquences d’octets différentes, et c’est précisément cet écart que corrige la normalisation. Les formes canoniques ne font que réordonner les octets, si bien que é dans l’une ou l’autre forme signifie toujours la lettre e avec un accent aigu.

Ce que « compatibilité » change réellement

Les formes K (NFKC, NFKD) réécrivent aussi des caractères qui semblent apparentés mais portent un formatage différent. C’est une opération avec perte : vous ne pouvez pas retrouver l’original. Par exemple :

  • fi (U+FB01, ligature latine minuscule fi) devient fi (deux lettres)
  • ① (U+2460, chiffre un entouré) devient 1
  • ㌀ (U+3300, le carré CJK « apaato ») devient アパート
  • La A pleine largeur (U+FF21) devient A

C’est puissant pour la recherche et la déduplication, mais destructeur pour la typographie, alors n’utilisez les formes K que lorsque la fidélité visuelle n’a pas d’importance.

Une règle pratique

  • Stockez le contenu utilisateur en NFC.
  • Comparez les identifiants en NFC pour que café écrit comme un seul point de code et café écrit comme e + U+0301 correspondent ; passez à NFKC quand vous voulez aussi que fi et fi, ou la A pleine largeur et A, se comparent comme égaux, comme le font les règles d’identifiants de UAX #31.
  • Produisez des slugs sans accent en normalisant en NFD puis en supprimant le bloc des signes de combinaison U+0300 à U+036F.

Questions fréquentes

Cela signifie en général que votre entrée était déjà dans la forme cible. Collez du texte qui mélange des sources (un nom de fichier Mac, un extrait de PDF copié, une ligne d’une ancienne base de données) et il est bien plus probable que vous voyiez changer le nombre de caractères et d’octets.

Pour les URL d’affichage, NFC. Pour des slugs où vous voulez de l’ASCII pur, normalisez en NFD, retirez les signes de combinaison avec une regex sur U+0300 à U+036F, puis mettez en minuscules. NFKD est une alternative quand vous voulez aussi replier les ligatures et les chiffres entourés.

Les formes canoniques (NFC, NFD) ne changent jamais le sens, elles ne font que réordonner les octets. Les formes de compatibilité (NFKC, NFKD), elles, le changent : les ligatures se séparent, les lettres pleine largeur se replient et les exposants s’aplatissent. Ne les utilisez que lorsque c’est ce que vous voulez.

La normalisation s’exécute sur notre serveur via la classe Normalizer de PHP et le résultat revient dans la même requête ; votre texte n’est pas conservé. Nous n’enregistrons qu’un événement anonyme indiquant quelle forme a été appliquée, jamais le contenu lui-même.

Outils similaires

Outil disponible dans d’autres langues