Filigranes de texte IA : caractères cachés versus marques de sélection de tokens
Les filigranes de texte IA existent sous deux formes, et une seule est faite de caractères que vous pouvez supprimer.
| Type de filigrane | Où il se trouve | Visible par cet outil | Supprimable par cet outil |
|---|---|---|---|
| Marques à caractères cachés | Dans les octets du texte, sous forme de points de code invisibles ou inhabituels | Oui | Oui |
| Marques de sélection de tokens | Dans les choix de mots eux-mêmes | Non | Non |
Les marques à caractères cachés sont des points de code que votre éditeur de texte stocke et que votre écran ne dessine jamais.
Les marques de sélection de tokens sont portées par le mot que le modèle a choisi à chaque étape, donc elles ne laissent aucun caractère à trouver ni à retirer. Chaque outil d'IA qui marque aujourd'hui la sortie texte utilise ce type.
Qu'est-ce qui rend un caractère Unicode invisible ?
Un caractère est invisible lorsqu'il n'occupe aucune largeur à l'écran. Unicode enregistre ce comportement avec la propriété Default_Ignorable_Code_Point et la catégorie générale Cf, format.
Default_Ignorable_Code_Point est une propriété dérivée, publiée en liste texte brut dans DerivedCoreProperties.txt pour chaque version de la norme. Ce nettoyeur fixe Unicode 17.0, publié le 9 septembre 2025, qui a ajouté 4 803 nouveaux caractères et porté le total encodé à 159 801.
J'ai extrait les données de propriétés d'Unicode 17.0 et les ai comptées moi-même. 4 174 points de code portent Default_Ignorable_Code_Point, mais seuls 405 sont des caractères assignés. Les 3 769 autres sont des emplacements réservés que rien n'utilise encore. Sur les 405, 256 sont des sélecteurs de variante et 97 se trouvent dans le bloc Tags, ce qui laisse 52 qui apparaissent dans l'écriture ordinaire.
La catégorie Cf contient 170 caractères dans la même version. C'est pourquoi un chiffre marketing rond comme « 104 caractères cachés » ne dit rien à lui seul. Sans une version Unicode imprimée à côté, le chiffre ne peut être vérifié contre rien.
Pourquoi les filigranes de sélection de tokens survivent au nettoyage des caractères
Une sélection de tokens, aussi appelée filigrane statistique, est stockée dans les mots choisis par le modèle, donc supprimer les caractères invisibles ne nettoie pas les marques statistiques.
Aucun nettoyeur de filigranes de texte sur internet ne peut supprimer un filigrane de sélection de tokens ou statistique, car l'algorithme utilisé par les outils d'IA est propriétaire.
ChatGPT met-il un filigrane dans son texte ?
OpenAI dit non. Le 20 avril 2025, Rumidocs a rapporté que les réponses de GPT o3 et o4 mini contenaient U+202F, le NARROW NO-BREAK SPACE. OpenAI a répondu deux jours plus tard. Les caractères étaient « a quirk of large-scale reinforcement learning » et n'étaient pas un filigrane. Rumidocs a mis à jour l'article le 23 avril 2025 pour indiquer que les caractères spéciaux avaient cessé d'apparaître.
OpenAI a bien construit une méthode de filigrane texte en 2024 et ne l'a jamais déployée. Son article d'aide actuel sur la provenance liste ce qui porte un signal aujourd'hui : les images reçoivent C2PA Content Credentials et SynthID, l'audio reçoit SynthID, et le texte ne reçoit ni l'un ni l'autre. La même page indique que « our goal is to expand provenance signals to all modalities including text », ce qui est un plan plutôt qu'un produit.
La réponse honnête est courte. ChatGPT ne filigrane pas son texte, et les caractères trouvés en 2025 étaient un bug corrigé.
Types de caractères invisibles trouvés dans les sorties ChatGPT et Claude
Les caractères que ce nettoyeur trouve se répartissent en cinq groupes : caractères à largeur nulle, espaces inhabituels, caractères de contrôle, ponctuation ressemblante, et caractères de balise ou à usage privé.
| Groupe | Exemples | Ce que cela fait | Préréglage Standard |
|---|---|---|---|
| Caractères à largeur nulle | U+200B, U+200C, U+200D, U+2060, U+FEFF | N'occupe aucune largeur, mais est stocké dans le fichier | Supprime U+200B, U+2060, U+FEFF et conserve les deux liants |
| Espaces inhabituels | U+00A0, U+2009, U+202F, U+3000 | Ressemble à un espace, trie et cherche comme un caractère différent | Convertit en espace normal |
| Caractères de contrôle | Plages C0 et C1, contrôles bidirectionnels | Oriente le rendu ou casse les analyseurs, n'imprime jamais | Supprime tout sauf tabulation et retour à la ligne |
| Ponctuation ressemblante | Guillemets typographiques, tirets en et em, U+00AD | S'imprime, mais pas comme le caractère que vous avez tapé | Laisse tel quel |
| Balise et usage privé | U+E0000 à U+E007F, zone à usage privé | Transport un texte lisible qu'aucun humain ne voit | Supprime |
Voici l'exemple récurrent que j'ai utilisé pour chaque mesure de cette page. La phrase « The meeting starts at 9:30 am on 12 May. » fait 40 caractères et 40 octets lorsqu'elle est tapée directement dans un éditeur de texte brut. Après un passage dans un traitement de texte et un retour, elle en faisait 42 caractères et 49 octets. À l'intérieur se trouvaient une marque d'ordre des octets au début, un espace à largeur nulle après « am », et deux espaces ordinaires discrètement remplacés par U+202F et U+00A0. Neuf octets de plus. Rien de visible n'avait changé.
The meeting starts at 9:30 am on 12 May.Caractères à largeur nulle : U+200B, U+200C, U+200D, U+2060 et U+FEFF
Les caractères à largeur nulle n'occupent aucun espace à l'écran mais existent toujours dans le fichier, c'est pourquoi le texte collé peut porter des marques que personne ne voit.
| Point de code | Nom Unicode officiel | Rôle réel |
|---|---|---|
| U+200B | ZERO WIDTH SPACE | Marque une opportunité de retour à la ligne, surtout inséré par les éditeurs web |
| U+200C | ZERO WIDTH NON-JOINER | Garde les lettres séparées dans les mots persans et arabes |
| U+200D | ZERO WIDTH JOINER | Joint des emojis en une image et forme des conjonctions dans les écritures indiennes |
| U+2060 | WORD JOINER | Empêche un retour à la ligne à cet endroit |
| U+FEFF | ZERO WIDTH NO-BREAK SPACE | La marque d'ordre des octets, généralement laissée par un éditeur de texte et non par une IA |
Deux de ces cinq sont des caractères utiles, pas des déchets. U+200C et U+200D portent un sens dans de vraies langues, raison pour laquelle le préréglage Standard les laisse en place.
Espaces inhabituels : U+00A0, U+2009, U+202F et U+3000
Les espaces inhabituels ressemblent à un espace ordinaire mais portent un point de code différent, ce qui casse la recherche, le tri et le code.
Unicode 17.0 définit 17 caractères dans la catégorie Zs, séparateur d'espace, et un seul d'entre eux est l'espace de votre clavier. J'ai listé les 17 depuis la base de caractères avec leurs largeurs en octets UTF-8, car c'est la largeur en octets qui les rend coûteux.
| Point de code | Nom Unicode officiel | Octets UTF-8 |
|---|---|---|
| U+0020 | SPACE | 1 |
| U+00A0 | NO-BREAK SPACE | 2 |
| U+1680 | OGHAM SPACE MARK | 3 |
| U+2000 to U+200A | EN QUAD jusqu'à HAIR SPACE, 11 caractères | 3 chacun |
| U+202F | NARROW NO-BREAK SPACE | 3 |
| U+205F | MEDIUM MATHEMATICAL SPACE | 3 |
| U+3000 | IDEOGRAPHIC SPACE | 3 |
Un seul U+202F coûte trois octets là où un espace en coûte un, et une recherche de « 9:30 am » ne correspondra pas à « 9:30 am » lorsque l'écart est U+202F. Ce décalage est la raison pour laquelle les espaces sont normalisés même dans le préréglage Standard.
9:30 am
9:30 amVous pouvez copier-coller le texte d'exemple dans la zone de saisie de l'outil ci-dessus pour voir le résultat.
Tirets, guillemets typographiques et traits d'union conditionnels que les éditeurs insèrent
Les guillemets typographiques, les longs tirets et le trait d'union conditionnel U+00AD viennent généralement d'un réglage de correction automatique d'un traitement de texte, pas d'un modèle de langage.
Unicode 17.0 attribue la propriété Dash à 31 caractères, du simple U+002D de votre clavier à U+2014 EM DASH et U+2E3A TWO-EM DASH. Un seul est une touche clavier. Le reste arrive lorsque le logiciel décide de ce que vous vouliez dire. U+00AD est l'exception, car il s'imprime comme un trait d'union seulement lorsqu'une ligne se coupe là et reste invisible partout ailleurs.
Les tirets sont la question qui amène la plupart des gens sur une page comme celle-ci, et la réponse courte est qu'ils ne prouvent rien. L'argument complet se trouve plus bas dans la section sur les tirets cadratin.
Caractères de balise et à usage privé qui cachent des instructions dans le texte
Les caractères du bloc Unicode Tags, U+E0000 à U+E007F, peuvent porter une phrase complète qu'aucun lecteur humain ne verra jamais. C'est ainsi que des attaquants glissent des instructions cachées dans un texte qu'un assistant IA lira plus tard.
Le AWS Security Blog a couvert la contrebande de caractères Unicode le 30 septembre 2025. Il décrit des caractères de balise « Initially designed as invisible markers for indicating language within text » qui ont « emerged as a potential vector for prompt injection ». Une note de recherche de la Cloud Security Alliance datée du 10 mars 2026 a suivi le même truc dans les skills d'agents IA, les descriptions d'outils et les serveurs MCP. Ce travail nomme le bloc Tags aux côtés de U+200B, U+200C, U+200D et U+FEFF.
J'en ai construit un pour voir sa taille. La phrase visible « Great work on the report. » fait 25 caractères et 25 octets. J'ai ajouté une instruction de 42 caractères encodée en caractères de balise. Le fichier est passé à 67 caractères et 193 octets. À l'écran, cela se lit toujours comme cinq mots et un point, et un script a extrait l'instruction intacte de la copie. Chaque caractère de balise coûte quatre octets et zéro pixel.
Great work on the report.C'est la raison la plus forte de nettoyer du texte qui n'a rien à voir avec la détection d'IA. Collez un bloc de texte d'une page web dans un assistant de chat et vous lui remettez peut-être des instructions que vous n'avez jamais tapées.
Suppression des caractères invisibles dans votre navigateur : le flux scan et nettoyage
Ce nettoyeur analyse votre texte dès que vous le collez, liste chaque détection avec son nom Unicode officiel et sa position, et ne change rien tant que vous n'appuyez pas sur Nettoyer le texte.
La séquence comporte quatre étapes :
- Collez votre texte ou déposez un fichier .txt ou .md.
- Examinez la liste des détections, qui nomme chaque caractère et où il se trouve.
- Choisissez un préréglage, ou conservez des détections individuelles que vous voulez protéger.
- Nettoyez, puis copiez le résultat ou téléchargez-le.
Ce nettoyeur ne réécrit, ne paraphrase et ne « humanise » pas un seul mot de votre texte.
Comparaison des préréglages Standard, Avancé et Strict
Standard retire les caractères qui posent problème dans l'écriture normale, Avancé élargit le filet, et Strict retire le plus.
| Groupe de caractères | Standard | Avancé | Strict |
|---|---|---|---|
| Espace à largeur nulle, liant de mots, marque d'ordre des octets | Supprimé | Supprimé | Supprimé |
| Contrôles bidirectionnels et contrôles C0/C1 | Supprimé | Supprimé | Supprimé |
| Bloc Tags et caractères à usage privé | Supprimé | Supprimé | Supprimé |
| Trait d'union conditionnel U+00AD | Supprimé | Supprimé | Supprimé |
| Espaces inhabituels de la catégorie Zs | Converti en U+0020 | Converti en U+0020 | Converti en U+0020 |
| Liants U+200C et U+200D | Conservé | Supprimé hors des séquences d'emoji | Supprimé partout |
| Sélecteurs de variante | Conservé | Supprimé hors des séquences d'emoji | Supprimé partout |
| Guillemets typographiques et longs tirets | Conservé | Conservé | Converti en guillemets droits et un tiret simple |
Trois filtres en un tap accompagnent les préréglages : supprimer les invisibles, retirer tirets et traits d'union, et retirer les emojis. Publier ces règles est délibéré. Chaque outil concurrent cache son jeu de règles derrière un seul bouton, donc vous ne savez pas ce qu'il a retiré de votre texte jusqu'à ce que quelque chose casse.
Comment la protection du code Markdown garde les blocs de code intacts
Avec le mode Markdown et la protection activés, le nettoyeur ignore le code délimité et en ligne, pour qu'un extrait qui a besoin d'un caractère exact le conserve.
Le code est le seul endroit où un caractère que vous appelleriez déchet en prose est porteur. Une expression régulière ou une chaîne de test peut dépendre d'une marque d'ordre des octets exactement à sa place.
Votre texte quitte-t-il votre appareil ?
Non. L'analyse et le nettoyage s'exécutent tous deux dans votre navigateur, et la page n'envoie ni ne stocke jamais votre texte.
La seconde moitié honnête appartient au même souffle. Cette page est gratuite, elle peut donc encore afficher des publicités et utiliser l'analytique du site. Le rapport JSON optionnel enregistre ce qui a changé. Il ne contient aucun de vos textes.
Limites de texte et de fichier : 20 000 mots et 1 Mo
Le nettoyeur accepte jusqu'à 20 000 mots de texte collé, ou un fichier UTF-8 jusqu'à 1 Mo aux formats .txt ou .md.
Tout le reste est hors périmètre : pas de HTML, DOCX, PDF, JSON ni CSV, et le collage arrive uniquement en texte brut. JavaScript est requis. Il n'y a ni compte ni paiement. L'interface est proposée en 26 langues. Les noms Unicode officiels restent en anglais dans toutes, car un nom de caractère traduit n'est plus un nom que l'on peut citer.
Pour les photos plutôt que le texte, vous pouvez supprimer les infos IA de l'image ou modifier les métadonnées de l'image.
Marquage de texte IA par fournisseur : comparaison de ChatGPT, Claude, Gemini et Grok
Seuls certains fournisseurs d'IA marquent leur sortie texte, et tous ceux qui le font utilisent le choix des mots plutôt que des caractères cachés.
| Fournisseur | Marque le texte | Méthode | Trouvé par ce nettoyeur | Source et date |
|---|---|---|---|---|
| Anthropic, Claude | Oui | Filigrane de sélection de tokens, une version de SynthID Text | Non | Anthropic, annonce du 11 août 2026, note technique du 14 août 2026, mise à jour le 1er septembre 2026 |
| Google, Gemini | Oui | SynthID Text, modulation de probabilité des tokens | Non | Google DeepMind, 14 mai 2024, open source plus tard la même année |
| OpenAI, ChatGPT | Aucun filigrane texte confirmé | Aucun en production pour le texte. Les images portent C2PA et SynthID, l'audio porte SynthID | Non applicable | Article d'aide OpenAI sur la provenance, à jour au 2 septembre 2026 |
| xAI, Grok | Aucun engagement publié | Aucun indiqué | Non applicable | xAI n'a pas signé le code de pratiques de transparence de la Commission, rapporté le 12 août 2026 |
Anthropic indique que les modèles lancés le 2 août 2026 ou après portent la marque dès le lancement. L'entreprise travaille à ajouter le marquage aux modèles publiés avant cette date. La détection de filigranes texte n'est pas un vérificateur public. Anthropic précise que la détection « is currently in private preview, available to eligible organizations as required under EU law ». La liste des éligibles comprend les régulateurs, les forces de l'ordre, les médias, les fact-checkers, les chercheurs, les organismes éducatifs et les groupes de la société civile de l'UE. Le Claude Content Checker gratuit qu'Anthropic propose aussi lit les C2PA Content Credentials sur les fichiers générés, ce qui est différent d'un filigrane texte.
Le fait que xAI ne signe pas le code de pratiques n'exempte pas Grok de l'AI Act lui-même. Un code volontaire est une voie de conformité, pas un substitut à la loi.
Comment fonctionne le filigrane texte de Claude ?
Claude choisit entre des mots également bons, et une clé secrète décide lequel il prend. La marque est la séquence de choix, pas un caractère du texte.
Anthropic décrit le mécanisme clairement. « Instead of using an arbitrary random number generator to pick the next word, watermarking uses the key and a few words that come before to settle what word the model should pick. » L'entreprise précise aussi que le filigrane texte de Claude « is a version of the SynthID-Text approach published by Google DeepMind in a Nature paper in 2024 ».
Sur la robustesse, Anthropic est précis. « Light editing probably won't remove the watermark completely », et une réécriture complète où chaque mot est remplacé le retire.
Ce que SynthID Text marque dans la sortie Gemini
SynthID Text intègre son motif dans les probabilités de tokens pendant que Gemini écrit. Google DeepMind a annoncé le filigrane texte SynthID pour l'application Gemini et l'expérience web le 14 mai 2024. La méthode fonctionne « by introducing additional information in the token distribution at the point of generation by modulating the likelihood of tokens being generated ». DeepMind a open-sourcé la méthode plus tard la même année via son Responsible Generative AI Toolkit.
Les limites publiées comptent autant que la méthode. SynthID Text fonctionne mieux sur des réponses plus longues et plus variées. Il est peu performant sur de brèves réponses factuelles, où le modèle a presque aucune liberté de formulation. La confiance baisse encore lorsque le texte est profondément réécrit ou traduit.
Détections de caractères cachés et autorat IA : pourquoi l'un ne prouve jamais l'autre
Un caractère caché est la preuve que quelque chose a traité votre texte, pas la preuve qu'une IA l'a écrit.
Chaque caractère invisible a une explication ordinaire qui existait avant l'écriture par IA. Les traitements de texte, les systèmes de gestion de contenu et les exportateurs PDF les insèrent depuis des décennies. Une détection vous dit que le texte est passé par un logiciel, ce qui est vrai de presque chaque phrase que quelqu'un publie.
D'où viennent les caractères invisibles en dehors de l'IA ?
Les traitements de texte, éditeurs web, exports PDF, outils de traduction, applications de chat et le simple copier-coller insèrent tous des caractères invisibles d'eux-mêmes.
| Source | Caractères qu'elle ajoute souvent | Pourquoi |
|---|---|---|
| Traitements de texte | U+00A0, U+2019, U+2014, U+00AD | Correction automatique et césure automatique |
| Éditeurs web et CMS | U+200B, U+FEFF | Indices de retour à la ligne et marqueurs d'encodage de fichier |
| Exports PDF | U+2009, U+202F, U+00A0 | Préserver l'espacement typographique lorsque le texte est recopié |
| Outils de traduction et de localisation | U+200C, U+200D, U+061C | Rendu correct des écritures arabe, persane et indiennes |
| Applications de chat et de messagerie | U+200D, U+FE0F | Séquences d'emoji et présentation texte ou emoji |
| Copier-coller entre applications | U+FEFF, espaces Zs mélangés | Conversion d'encodage dans le presse-papiers |
Ma propre phrase de test de 40 octets a accumulé quatre détections sans jamais rencontrer un modèle de langage. C'est tout l'argument en une seule mesure.
Pourquoi les tirets cadratin ne sont pas un filigrane
Un tiret cadratin est un signe de ponctuation normal que les auteurs, les éditeurs et la correction automatique utilisent depuis des siècles, donc il ne porte aucun signal sur qui a écrit une phrase.
La correction de 2025 tranche. OpenAI a déclaré le 14 novembre 2025 que ChatGPT obéirait enfin à une instruction personnalisée lui demandant d'arrêter d'utiliser les tirets cadratin. Sam Altman l'a dit clairement ce jour-là : « If you tell ChatGPT not to use em-dashes in your custom instructions, it finally does what it's supposed to do ». Une habitude qu'un utilisateur peut désactiver dans un réglage de personnalisation n'a jamais été une marque. C'était un motif de style appris à l'entraînement, et la correction était une préférence.
Ce nettoyeur propose toujours la suppression des tirets, et la raison est honnête. C'est un filtre de style pour ceux qui veulent des guillemets droits et des tirets simples dans leur texte. Ce n'est pas un filtre de filigrane, et cela ne changera pas ce qu'un détecteur dira de votre texte.
Quand le nettoyage casse le texte : persan, arabe, écritures indiennes et emoji
Supprimer les caractères à largeur nulle peut casser un texte correct, car certaines écritures en ont besoin pour épeler correctement les mots.
J'ai testé les quatre cas qui cassent le plus souvent et noté exactement ce qui s'est passé. Le mot persan میخواهم compte huit caractères, et le U+200C au milieu empêche les deux parties de se joindre. Supprimez-le et vous obtenez میخواهم, sept caractères et une forme écrite différente. En dévanagari, क्ष porte un U+200D qui forme la conjonction correcte, et le retirer change la forme à l'écran. L'emoji famille 👨👩👧👦 compte sept points de code, quatre images tenues ensemble par trois liants U+200D. Retirez les liants et il se désagrège en 👨👩👧👦, quatre personnes séparées. Un cœur rouge ❤️ porte U+FE0F pour s'afficher comme emoji, et sans lui le même point de code retombe en symbole texte, ❤.
C'est pourquoi l'outil montre les détections avant de rien nettoyer, pourquoi les détections individuelles peuvent être conservées, et pourquoi Strict n'est pas le défaut. Un éditeur travaillant dans une langue voit un résultat propre. Un éditeur travaillant dans six voit un rapport de bug.
Verdict final sur le nettoyage des filigranes de texte IA
Nettoyer les caractères invisibles vaut la peine pour un texte propre, portable et sûr.
Deux raisons justifient d'utiliser cet outil. La première est que les caractères cachés cassent des choses, en silence, dans les résultats de recherche, les recherches de tableur, le code et les URL. La seconde est que les caractères de balise peuvent porter des instructions vers un assistant IA que personne n'a tapées et que personne ne peut voir. Cela fait du nettoyage une habitude de sécurité plutôt qu'un geste cosmétique.
Quiconque espère battre un filigrane de fournisseur nettoie la mauvaise couche. Claude et Gemini marquent le texte dans les choix de mots, OpenAI marque les images et l'audio mais pas le texte, et aucune quantité de nettoyage de caractères n'atteint aucun d'eux. Une façon d'affaiblir ces filigranes statistiques est de traduire le texte dans quelques langues différentes puis de le retraduire vers l'original.
Collez une page de votre propre texte dans la zone de saisie ci-dessus et lisez les détections pour mieux comprendre le texte, ou copiez simplement la sortie.
C'est tout pour l'instant. Merci d'avoir lu jusqu'ici.