BrowserTools
Accueil / Encodeurs / Inspecteur Unicode

Inspecteur Unicode

Affichez chaque caractère d'un texte avec son code et son nom, et repérez les caractères cachés ou trompeurs.

Chargement de Inspecteur Unicode… Si rien ne se passe, activez JavaScript.

Un texte qui paraît identique à l'écran peut être très différent en dessous. Un mot copié depuis un PDF peut contenir un trait d'union conditionnel, un nom d'utilisateur peut cacher une espace sans chasse, un lien peut remplacer le a latin par le а cyrillique, et une lettre accentuée peut être stockée en un seul caractère ou en lettre de base suivie d'un accent combinant. L'Inspecteur Unicode découpe n'importe quel texte en caractères perçus par le lecteur (grappes de graphèmes) et liste chaque point de code qu'ils contiennent avec son numéro U+, son nom Unicode officiel, sa catégorie générale et son bloc, pour que vous sachiez exactement à quoi vous avez affaire.

Exemples

Entrée é (one code point)
Sortie U+00E9 LATIN SMALL LETTER E WITH ACUTE

Forme NFC, 2 octets en UTF-8.

Entrée é (two code points)
Sortie U+0065 + U+0301 COMBINING ACUTE ACCENT

Forme NFD : rendu identique, mais la comparaison échoue.

Entrée pаypal (with Cyrillic а)
Sortie U+0430 CYRILLIC SMALL LETTER A

Signalé comme mot à écritures mélangées.

Questions fréquentes

Comment trouver une espace sans chasse dans mon texte ?
Collez le texte dans la zone. Chaque caractère invisible apparaît dans le tableau sous forme d'étiquette (ZWSP pour l'espace sans chasse, ZWJ, WJ, BOM, SHY, etc.) et la liste d'avertissements en haut les compte. Utilisez le panneau de nettoyage pour copier une version sans eux.
Quelle différence entre caractère, point de code et octet ?
Un point de code est une entrée numérotée d'Unicode, comme U+00E9 pour é. Ce que le lecteur voit comme un caractère (un graphème) peut regrouper plusieurs points de code : un emoji avec une couleur de peau et un joiner peut en compter quatre ou plus. Les octets dépendent de l'encodage : UTF-8 utilise 1 à 4 octets par point de code et UTF-16 en utilise 2 ou 4. Les compteurs affichent tout cela pour votre texte.
Pourquoi deux chaînes identiques à l'œil ne sont-elles pas égales ?
En général à cause de la normalisation ou de caractères cachés. "Café" peut être stocké avec un é précomposé (NFC) ou avec un e suivi d'un accent combinant (NFD) : l'affichage est le même, mais la comparaison échoue. Une espace insécable, un caractère sans chasse ou une lettre cyrillique ressemblante ont le même effet. Normaliser les deux chaînes en NFC et supprimer les caractères invisibles règle la plupart des cas.
Que sont NFC, NFD, NFKC et NFKD ?
Ce sont les quatre formes de normalisation Unicode. NFC compose les caractères quand c'est possible et c'est la forme recommandée pour le stockage et le web. NFD les décompose en lettres de base et marques combinantes. Les formes K (compatibilité) ramènent en plus les variantes ressemblantes à une forme simple : la ligature fi devient fi, l'exposant ² devient 2 et les lettres pleine chasse deviennent de l'ASCII. Les formes K perdent de l'information : utilisez-les pour rechercher et comparer, pas pour stocker.
Qu'est-ce qu'une attaque par homoglyphes ou par mélange d'écritures ?
C'est l'utilisation de caractères d'une autre écriture qui ressemblent à des lettres latines, par exemple le а cyrillique (U+0430) à la place du a latin, pour faire passer un faux domaine, nom d'utilisateur ou nom de fichier pour authentique. L'inspecteur signale tout mot qui mélange lettres latines et lettres cyrilliques, grecques, arméniennes ou cherokees, et affiche les points de code exacts pour rendre la substitution évidente.
Que sont les caractères de contrôle bidirectionnel et pourquoi sont-ils signalés ?
Des caractères comme RLO (U+202E) ou RLI (U+2067) demandent au moteur de rendu d'afficher la suite de droite à gauche. Ils sont nécessaires pour certains textes en arabe et en hébreu, mais ils peuvent aussi déguiser un contenu : un fichier nommé invoice, puis RLO, puis fdp.exe s'affiche comme invoiceexe.pdf, et les travaux Trojan Source de 2021 ont montré qu'ils peuvent cacher une logique malveillante dans du code source. En dehors d'un vrai texte de droite à gauche, ils sont presque toujours un signal d'alerte.
Mon texte est-il envoyé quelque part ?
Non. L'analyse s'exécute entièrement dans votre navigateur. La seule chose téléchargée est la table des noms Unicode, identique pour tout le monde et servie par ce site, pas par un tiers.
D'où viennent les noms des caractères ?
De l'Unicode Character Database publiée par l'Unicode Consortium sous la Unicode License, dont la version est indiquée en bas de la page. Les noms des idéogrammes CJK et des syllabes hangûl sont générés par les règles algorithmiques de la norme elle-même. La catégorie générale provient de la prise en charge Unicode intégrée à votre navigateur : un caractère très récent peut donc apparaître comme non attribué dans un navigateur plus ancien.

À propos de Inspecteur Unicode

L'outil signale les caractères qui posent souvent problème. Les caractères de formatage invisibles comme l'espace sans chasse, le zero-width joiner, le word joiner et l'indicateur d'ordre des octets (BOM) ; les contrôles bidirectionnels comme RLO et LRI, qui peuvent réordonner visuellement le texte et sont à la base de l'attaque "Trojan Source" contre le code source ; les espaces insécables, fines et autres espaces inhabituelles qui ne correspondent pas à une espace normale dans le code ou les recherches ; les lettres d'apparence vide utilisées pour simuler des noms vides ; et les mots qui mélangent lettres latines et cyrilliques ou grecques, la ruse classique des homoglyphes derrière les domaines d'hameçonnage. Les séquences d'emoji sont reconnues : les joiners à l'intérieur de 👩🏽‍💻 ne sont pas signalés comme suspects.

Cliquez sur une ligne pour obtenir toutes les représentations de ce point de code : octets UTF-8, unités UTF-16, entités HTML numériques et nommées, échappements JavaScript, CSS et Python, et forme encodée pour les URL. Les compteurs au-dessus du tableau indiquent le nombre de graphèmes, de points de code, d'unités UTF-16 (ce que renvoie length en JavaScript) et d'octets UTF-8, ce qui explique pourquoi une colonne de base de données, un SMS ou un tweet comptent votre texte autrement que ce que vous voyez.

Le panneau de normalisation compare les quatre formes de normalisation Unicode (NFC, NFD, NFKC, NFKD) et permet de copier ou d'inspecter chacune, ce qui est la façon de corriger des chaînes qui se ressemblent mais échouent à un test d'égalité. Enfin, le panneau de nettoyage supprime les caractères invisibles et bidirectionnels, remplace les espaces exotiques par une espace normale, retire les caractères de contrôle égarés et normalise le résultat si vous le souhaitez, en laissant les emoji intacts. Les noms et blocs des caractères proviennent de l'Unicode Character Database officielle, et tout s'exécute localement dans votre navigateur.

L'UTF-8 a été conçu sur un set de table

En septembre 1992, Ken Thompson et Rob Pike, des Bell Labs, n'étaient pas satisfaits de l'encodage multioctet proposé pour le nouveau jeu de caractères universel. Lors d'un dîner dans un restaurant du New Jersey, Thompson esquissa un meilleur schéma sur un set de table en papier : l'ASCII reste sur un octet, aucun octet d'une séquence multioctet ne peut être confondu avec un caractère ASCII, et l'on retrouve toujours le début d'un caractère en regardant les bits de poids fort. Ils l'implémentèrent dans le système d'exploitation Plan 9 en quelques jours.

Ce schéma, c'est l'UTF-8, et sa compatibilité avec l'ASCII explique qu'il se soit imposé sur le web, où la grande majorité des pages l'utilisent aujourd'hui. Unicode lui-même avait commencé quelques années plus tôt, avec la proposition de Joe Becker en 1988 d'un jeu de caractères "Unicode" et la première version de la norme publiée en 1991.

La souplesse qui a rendu Unicode universel a aussi créé de nouveaux problèmes de sécurité. En 2017, un chercheur a enregistré un domaine écrit uniquement en lettres cyrilliques que les navigateurs affichaient comme apple.com, ce qui les a poussés à présenter ces noms sous leur forme punycode. En 2021, l'article Trojan Source de l'université de Cambridge a montré que les caractères de contrôle bidirectionnel pouvaient faire apparaître le code source autrement que le compilateur ne le lit.

Soutenir