Les textes générés par une IA contiennent souvent des caractères Unicode invisibles — le plus souvent des espaces insécables et des espaces fines insécables. Mais ce sont de simples sous-produits de la mise en forme, pas un filigrane caché. Le véritable tatouage de texte existe et fonctionne en orientant statistiquement le choix des mots, sans laisser de caractères particuliers à détecter. Vous pouvez vérifier n’importe quel texte vous-même en quelques secondes.
L’affirmation, et pourquoi elle s’est répandue
Tous les quelques mois, une publication devient virale en montrant que le texte copié depuis ChatGPT contient des caractères cachés, avec pour conclusion qu’OpenAI tatoue secrètement ses réponses pour pouvoir les tracer.
L’observation est réelle. La conclusion, elle, n’est pas étayée.
Ce que les gens trouvent est authentique : collez une réponse de chat dans un inspecteur de caractères et vous verrez fréquemment des points de code qui ne s’affichent pas. Le raccourci se produit dans l’interprétation. Un filigrane doit résister à l’édition, être difficile à supprimer et encoder une information. Des caractères qui disparaissent dès qu’on lance un rechercher-remplacer, et qui ne transportent aucune donnée récupérable, ne remplissent aucune de ces conditions.
Ce que le texte contient réellement
Les caractères invisibles qui apparaissent dans les textes IA sont, dans l’immense majorité des cas, de simples caractères typographiques :
| Caractère | Point de code | Pourquoi il apparaît |
|---|---|---|
| Espace insécable | U+00A0 | Garde un nombre et son unité sur la même ligne |
| Espace fine insécable | U+202F | Espacement fin avant la ponctuation et dans les nombres |
| Espace sans chasse | U+200B | Indications de saut de ligne, souvent héritées du web |
| Césure conditionnelle | U+00AD | Marque où un mot peut être coupé en fin de ligne |
| Indicateur d’ordre des octets (BOM) | U+FEFF | Artefact d’encodage provenant d’un fichier en amont |
Chacun a une fonction typographique légitime et chacun existe depuis des décennies, bien avant les modèles de langage. Ils arrivent par les mêmes voies que toujours : le modèle les a appris dans des textes d’entraînement qui les contenaient, l’interface de chat affiche le résultat mis en forme en HTML, et copier depuis une page web rendue emporte tout ce que le balisage contenait.
Cette dernière voie compte plus qu’on ne le pense. Une grande partie de ce qui est attribué au modèle est en réalité introduit par la copie depuis le navigateur, pas par la génération. Copier la même réponse via l’API donne fréquemment un texte plus propre qu’en la copiant depuis la fenêtre de chat.
Le tatouage des textes IA existe-t-il vraiment ?
Oui — mais il ne fonctionne pas comme le supposent les publications virales.
SynthID-Text de Google DeepMind est l’approche la mieux documentée, publiée dans Nature en 2024. Elle consiste à orienter subtilement les mots échantillonnés par le modèle à chaque étape, de sorte que le texte final porte une signature statistique détectable par un vérificateur adapté. Aucun caractère spécial n’est impliqué. Rien n’est inséré. Le filigrane réside dans le choix de mots ordinaires, c’est pourquoi il survit à la copie et aux retouches légères, et pourquoi vous ne pouvez pas le trouver en inspectant des points de code.
OpenAI a publiquement évoqué ses recherches sur le tatouage de texte, sans avoir déployé d’implémentation confirmée côté utilisateur pour les réponses de ChatGPT.
La conséquence pratique va à l’encontre de la panique : si un modèle que vous utilisez est tatoué, supprimer les caractères invisibles ne retirera pas le filigrane. Et si vous trouvez des caractères invisibles, ce n’est pas une preuve de tatouage — c’est une preuve de mise en forme.
Pourquoi les caractères invisibles posent quand même problème
Filigrane ou pas, vous voulez généralement les éliminer, car ils cassent les choses silencieusement :
- La recherche et le rechercher-remplacer échouent. Une espace sans chasse entre deux lettres fait que la recherche du mot ne trouve rien, sans raison visible.
- La validation de formulaire rejette la saisie. Une adresse e-mail ou une clé de licence suivie d’une espace insécable échoue à une comparaison qui semble correcte à l’écran.
- Le code casse dans certains langages, pas dans d’autres. Une espace insécable à la place d’une espace normale est une erreur de syntaxe en Python, Go, Ruby, shell et JSON, pointant vers une ligne qui paraît parfaitement correcte. JavaScript, TypeScript et C acceptent U+00A0 comme une espace ordinaire et compilent sans broncher — ce qui pose un autre problème, car le caractère survit alors dans le fichier jusqu’à ce qu’il atteigne un outil, lui, plus regardant.
- Les imports CSV se corrompent. Un indicateur BOM se colle au premier en-tête de colonne, et le premier champ ne correspond plus, sans message d’erreur.
- Des doublons apparaissent. Deux entrées visuellement identiques sont des chaînes différentes, et la déduplication les ignore.
Ces pannes sont particulièrement agaçantes parce que le texte semble correct. Tous les réflexes de débogage pointent ailleurs.
Comment vérifier et nettoyer votre propre texte
Collez le texte dans le scanner de caractères invisibles. Il les supprime sur demande et affiche trois chiffres : le total des caractères cachés trouvés, combien d’entre eux étaient sans chasse, et combien étaient des césures conditionnelles. Le chiffre des caractères sans chasse englobe aussi les marques directionnelles gauche-à-droite et droite-à-gauche, et un indicateur BOM compte dans le total sans avoir de ligne à lui. Quand vous avez besoin de savoir quel caractère se trouve exactement où, le visualiseur de caractères invisibles étiquette chacun d’eux sur place au lieu de le supprimer. Rien ne quitte votre navigateur — les deux s’exécutent localement.
Pour une vue d’ensemble, le nettoyeur de textes IA traite les caractères invisibles en même temps que les tirets cadratins, les guillemets courbes et les emojis en une seule passe.
Une bonne habitude à prendre : lancez la vérification chaque fois qu’un texte franchit la frontière entre deux systèmes. D’une fenêtre de chat vers un éditeur de code, d’une page web vers un tableur, d’un PDF vers un formulaire. C’est là que les caractères invisibles font des dégâts, et c’est le moment où ils coûtent le moins cher à supprimer.
Pour la liste complète de ces caractères et de leur rôle, consultez la référence sur l’Unicode invisible.
Questions fréquentes
ChatGPT tatoue-t-il ses textes avec des caractères invisibles ?
Rien ne le prouve. Les caractères invisibles trouvés dans les réponses de ChatGPT sont de simples caractères typographiques, comme les espaces insécables et fines insécables, qui existent depuis des décennies et ne transportent aucune donnée. Ils disparaissent en outre avec le moindre nettoyage, ce qui les rendrait inutilisables comme filigrane.
Un texte généré par une IA peut-il être tatoué ?
Oui. SynthID-Text de Google DeepMind, publié dans Nature en 2024, oriente le choix des mots du modèle pour que le texte porte une signature statistique. Il n’insère aucun caractère spécial : l’inspection des points de code ne le révèlera jamais, et supprimer les caractères invisibles ne le retire pas.
Pourquoi le texte copié depuis ChatGPT contient-il des caractères cachés ?
Principalement parce que vous copiez du HTML rendu depuis une page web. L’interface de chat affiche un texte mis en forme, et la copie emporte les caractères d’espacement utilisés par cette mise en forme. Récupérer la même réponse via l’API produit souvent un texte nettement plus propre.
Comment trouver les caractères invisibles dans mon texte ?
Collez-le dans un scanner. Notre scanner de caractères invisibles indique combien de caractères cachés sont présents, combien sont sans chasse et combien sont des césures conditionnelles, puis les supprime sur demande. Pour voir quel caractère se trouve où, le visualiseur de caractères invisibles étiquette chacun d’eux sur place. Les deux s’exécutent entièrement dans votre navigateur.
Les caractères invisibles sont-ils dangereux ?
Pas dangereux, mais réellement perturbateurs. Ils cassent la recherche, font échouer la validation des formulaires, provoquent des erreurs de syntaxe dans le code, corrompent les en-têtes CSV et créent des doublons visuellement identiques. Comme le texte paraît normal, ces bugs sont particulièrement difficiles à diagnostiquer.