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
é (one code point)
U+00E9 LATIN SMALL LETTER E WITH ACUTE
Forme NFC, 2 octets en UTF-8.
é (two code points)
U+0065 + U+0301 COMBINING ACUTE ACCENT
Forme NFD : rendu identique, mais la comparaison échoue.
pаypal (with Cyrillic а)
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 ?
Quelle différence entre caractère, point de code et octet ?
Pourquoi deux chaînes identiques à l'œil ne sont-elles pas égales ?
Que sont NFC, NFD, NFKC et NFKD ?
Qu'est-ce qu'une attaque par homoglyphes ou par mélange d'écritures ?
Que sont les caractères de contrôle bidirectionnel et pourquoi sont-ils signalés ?
Mon texte est-il envoyé quelque part ?
D'où viennent les noms des caractères ?
À 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.