Aussi disponible en : English · Español · Português · العربية
Détecteur de caractères invisibles : trouvez les cachés
Tous les caractères invisibles, ignorables et déguisés de votre texte, nommés, comptés et localisés.
Qu'est-ce qu'un caractère invisible ?
Un caractère invisible est un point de code qui n'occupe aucune place visible mais se trouve bel et bien dans le texte. Certains sont utiles : un liant sans chasse est ce qui fusionne deux emojis en un seul, et un trait d'union conditionnel indique où un mot peut se couper. D'autres sont structurels, comme les contrôles bidirectionnels qui permettent à l'arabe et au français de partager une ligne. Et d'autres sont là parce que quelqu'un les y a mis.
Ils posent problème parce que le logiciel les voit et vous non. Une recherche qui devrait correspondre échoue. Deux chaînes d'apparence identique se comparent comme différentes. Une clé d'API copiée gagne un caractère au milieu et cesse de fonctionner, sans rien à l'écran pour l'expliquer.
Cette page les trouve, nomme chacun avec son nom officiel Unicode et son point de code, et indique où il se situe dans le texte. L'exemple chargé plus haut se lit comme vingt caractères visibles et fait en réalité quarante-neuf points de code.
Comment l'utiliser
- Collez le texte : n'importe quoi — un message, un nom de fichier, une cellule de tableur, un message de commit qu'aucun grep ne retrouve. Il est examiné dans votre navigateur et jamais envoyé.
- Lisez le tableau : chaque ligne est un caractère, avec son point de code, son nom Unicode, le type de chose dont il s'agit, son nombre d'occurrences et leur position.
- Puis retirez-les si vous voulez : un bouton supprime tous les caractères cachés et transforme les espaces bizarres en espaces ordinaires plutôt que de les effacer, pour que des mots visiblement séparés le restent.
Pourquoi cela trouve plus qu'un nettoyeur
Presque tous les outils qui suppriment les caractères invisibles embarquent une liste écrite à la main des quelques-uns que leur auteur avait rencontrés. C'est vrai du nettoyeur de texte de ce site aussi : sa liste couvre treize points de code, et c'est la raison d'être de cette page.
Unicode publie la vraie réponse sous forme d'une propriété nommée Default_Ignorable_Code_Point, qui marque les caractères pour lesquels un moteur de rendu ne doit rien afficher. Elle couvre 4 174 points de code, dont 405 sont des caractères attribués et nommés. Une liste de treize laisse donc de côté 392 caractères nommés invisibles par définition : les 260 sélecteurs de variante, l'intégralité du bloc de balises et ses 97 caractères, le liant de graphèmes, la marque de lettre arabe, les remplisseurs du hangûl.
Tout ce qui mérite d'être signalé n'est pas ignorable pour autant, aussi le tableau indique-t-il sur quelle autorité chaque ligne repose. Une espace insécable ressemble parfaitement à une espace, mais ce n'est pas celle sur laquelle un analyseur découpe, et un caractère de contrôle au milieu d'une ligne est invisible sans qu'Unicode le dise ignorable. Les deux sont signalés, et pour les deux on précise ce qu'ils sont.
Le bloc de balises, et le texte qu'on ne voit pas
Quatre-vingt-dix-sept caractères entre U+E0001 et U+E007F reproduisent exactement l'ASCII. Le A majuscule de balise est le A plus un décalage fixe, l'espace de balise est une espace, et aucun ne s'affiche. Ils ont un rôle légitime dans les séquences de drapeaux emoji, qui est la façon dont les drapeaux de l'Angleterre, de l'Écosse et du pays de Galles sont encodés.
Ils sont aussi le moyen de faire voyager une phrase à l'intérieur d'un texte d'apparence tout à fait ordinaire. Collez ici quelque chose qui en contient et la ligne décodée apparaît au-dessus, épelant ce qui était caché. L'exemple chargé sur cette page est exactement cela : vingt caractères visibles transportant une instruction que personne ne voit.
Ce n'est plus une curiosité mais une chose à vérifier, car le texte est désormais collé en permanence dans des systèmes qui lisent tous les caractères et pas seulement ceux qu'une personne voit. Que le texte caché soit un filigrane, un marqueur de traçage ou une instruction, la première étape honnête est de pouvoir le regarder.
Ce que cette page ne peut pas vous dire
Elle ne peut pas dire pourquoi un caractère est là. Un liant sans chasse au milieu d'un emoji fait son travail ; le même caractère entre deux lettres, non. L'outil rapporte ce qui est présent et vous laisse le jugement, car le même point de code est légitime dans un contexte et suspect dans un autre.
Il travaille aussi sur des points de code, pas sur ce que vous appelleriez des lettres. C'est la bonne unité ici — chaque caractère de balise et chaque sélecteur de variante moderne se situe au-delà du plan multilingue de base, si bien qu'un détecteur parcourant le texte de la façon naïve couperait chacun en deux et n'en trouverait aucun — mais cela signifie qu'un emoji de drapeau ou à teinte de peau compte pour plusieurs points de code et non pour un symbole.
Enfin, un résultat propre signifie qu'il n'y a rien de caché qu'Unicode nomme. Un texte peut encore tromper par des voies que cette page ne couvre pas, notamment en employant des lettres d'un autre alphabet identiques aux latines. C'est un autre problème, et une autre page.
Pourquoi est-ce gratuit ?
La liste de caractères tient en quelques kilo-octets livrés avec la page, et l'analyse s'exécute dans votre navigateur. Rien de ce que vous collez n'est envoyé, rien n'est journalisé, et il n'y a aucun compte à créer.
Sans inscription, sans limite, et sans filigrane sur ce que vous copiez.