Filigrane nei testi IA: caratteri nascosti a confronto con i marcatori di selezione dei token
Le filigrane nei testi IA si presentano in due forme, e solo una di esse è composta da caratteri che puoi eliminare.
| Tipo di filigrana | Dove si trova | Visibile a questo strumento | Rimovibile da questo strumento |
|---|---|---|---|
| Marcatori a caratteri nascosti | Nei byte del testo, sotto forma di punti di codice invisibili o insoliti | Sì | Sì |
| Marcatori di selezione dei token | Nella scelta stessa delle parole | No | No |
I marcatori a caratteri nascosti sono punti di codice che il tuo editor di testo memorizza e che lo schermo non visualizza mai.
I marcatori di selezione dei token sono determinati dalla parola scelta dal modello a ogni passaggio, quindi non lasciano alcun carattere da individuare né da rimuovere. Tutti gli strumenti di IA che oggi contrassegnano l'output di testo utilizzano questo tipo.
Cosa rende invisibile un carattere Unicode?
Un carattere è invisibile quando non occupa alcuna larghezza sullo schermo. Unicode registra questo comportamento con la proprietà Default_Ignorable_Code_Point e con la categoria generale Cf, che indica il formato.
Default_Ignorable_Code_Point è una proprietà derivata, pubblicata come elenco in formato testo in DerivedCoreProperties.txt per ogni versione dello standard. Questo strumento di pulizia si basa su Unicode 17.0, rilasciato il 9 settembre 2025, che ha aggiunto 4.803 nuovi caratteri portando il totale codificato a 159.801.
Ho estratto i dati sulle proprietà di Unicode 17.0 e li ho conteggiati personalmente. 4.174 punti di codice presentano la proprietà Default_Ignorable_Code_Point, ma solo 405 di essi corrispondono a caratteri assegnati. Gli altri 3.769 sono slot riservati non ancora utilizzati da nulla. Dei 405, 256 sono selettori di variazione e 97 si trovano nel blocco Tags, lasciandone 52 che compaiono nella scrittura comune.
La categoria Cf contiene 170 caratteri nella stessa versione. Ecco perché un numero di marketing a effetto come "104 caratteri nascosti" non dice nulla da solo. Senza una versione Unicode indicata accanto, il numero non può essere verificato rispetto a nulla.
Perché le filigrane di selezione dei token sopravvivono alla pulizia dei caratteri?
Una selezione di token, nota anche come filigrana statistica, è memorizzata nelle parole scelte dal modello, quindi l'eliminazione dei caratteri invisibili non rimuove i marcatori statistici.
Nessun pulitore di filigrane di testo su Internet può rimuovere una filigrana statistica o di selezione dei token, poiché l'algoritmo utilizzato dagli strumenti di IA è proprietario.
ChatGPT inserisce una filigrana nel proprio testo?
OpenAI afferma di no. Il 20 aprile 2025 Rumidocs ha riferito che le risposte di GPT o3 e o4 mini contenevano U+202F, il NARROW NO-BREAK SPACE. OpenAI ha risposto due giorni dopo spiegando che quei caratteri erano "un'anomalia dell'apprendimento per rinforzo su larga scala" e non una filigrana. Il 23 aprile 2025 Rumidocs ha aggiornato l'articolo affermando che i caratteri speciali avevano smesso di comparire.
Nel 2024 OpenAI ha effettivamente sviluppato un metodo di filigrana per i testi, senza tuttavia mai rilasciarlo. Il suo attuale articolo di supporto sulla provenienza elenca ciò che oggi include un segnale: le immagini ricevono C2PA Content Credentials e SynthID, l'audio riceve SynthID e il testo non riceve nessuno dei due. La stessa pagina dichiara che "il nostro obiettivo è estendere i segnali di provenienza a tutte le modalità, compreso il testo", trattandosi dunque di un piano anziché di un prodotto effettivo.
La risposta sincera è breve: ChatGPT non inserisce filigrane nel suo testo, e i caratteri individuati nel 2025 erano un bug che è stato risolto.
Tipi di caratteri invisibili riscontrati nell'output di ChatGPT e Claude
I caratteri rilevati da questo strumento di pulizia si dividono in cinque gruppi: caratteri a larghezza zero, spazi insoliti, caratteri di controllo, punteggiatura simile e caratteri di tag o ad uso privato.
| Gruppo | Esempi | Cosa fa | Preset Standard |
|---|---|---|---|
| Caratteri a larghezza zero | U+200B, U+200C, U+200D, U+2060, U+FEFF | Non occupa alcuna larghezza, resta memorizzato nel file | Rimuove U+200B, U+2060, U+FEFF e mantiene i due caratteri di giunzione |
| Spazi insoliti | U+00A0, U+2009, U+202F, U+3000 | Sembra un normale spazio, viene ordinato e cercato come un carattere diverso | Converte in uno spazio normale |
| Caratteri di controllo | Intervalli C0 e C1, controlli bidirezionali | Condiziona il rendering o blocca i parser, non viene mai stampato a video | Rimuove tutto eccetto tabulazioni e interruzioni di riga |
| Punteggiatura simile | Virgolette curve, trattini en ed em, U+00AD | Viene stampato a video, ma non come il carattere digitato | Lascia invariato |
| Tag e uso privato | Da U+E0000 a U+E007F, area ad uso privato | Contiene testo leggibile che nessun utente umano può vedere | Rimuove |
Ecco l'esempio pratico che ho utilizzato per ogni misurazione su questa pagina. La frase "The meeting starts at 9:30 am on 12 May." conta 40 caratteri e 40 byte se digitata direttamente in un editor di testo normale. Dopo un passaggio in un programma di elaborazione testi e ritorno, è risultata di 42 caratteri e 49 byte. All'interno erano presenti un byte order mark all'inizio, uno spazio a larghezza zero dopo "am" e due spazi ordinari silenziosamente sostituiti con U+202F e U+00A0. Nove byte in più. Nessun cambiamento visibile.
The meeting starts at 9:30 am on 12 May.Caratteri a larghezza zero: U+200B, U+200C, U+200D, U+2060 e U+FEFF
I caratteri a larghezza zero non occupano spazio sullo schermo ma sono comunque presenti nel file; ecco perché il testo incollato può contenere marcatori invisibili a chiunque.
| Punto di codice | Nome ufficiale Unicode | Funzione reale |
|---|---|---|
| U+200B | ZERO WIDTH SPACE | Segnala un punto di a capo opzionale, inserito per lo più da editor web |
| U+200C | ZERO WIDTH NON-JOINER | Separa le lettere nelle parole in persiano e arabo |
| U+200D | ZERO WIDTH JOINER | Unisce le emoji in un'unica immagine e forma legature nelle scritture indiche |
| U+2060 | WORD JOINER | Impedisce l'interruzione di riga in quel punto |
| U+FEFF | ZERO WIDTH NO-BREAK SPACE | Il byte order mark, solitamente lasciato da un editor di testo e non da un'IA |
Due di questi cinque sono caratteri funzionali, non spazzatura. U+200C e U+200D veicolano un significato in lingue reali, motivo per cui il preset Standard li mantiene dove si trovano.
Spazi insoliti: U+00A0, U+2009, U+202F e U+3000
Gli spazi insoliti sembrano normali spazi ma hanno un punto di codice differente, il che compromette la ricerca, l'ordinamento e il codice.
Unicode 17.0 definisce 17 caratteri nella categoria Zs, separatore di spazio, e solo uno di essi corrisponde allo spazio presente sulla tastiera. Ho elencato tutti e 17 i caratteri dal database con la loro dimensione in byte in UTF-8, perché è proprio l'ingombro in byte a renderli costosi.
| Punto di codice | Nome ufficiale Unicode | Byte UTF-8 |
|---|---|---|
| U+0020 | SPACE | 1 |
| U+00A0 | NO-BREAK SPACE | 2 |
| U+1680 | OGHAM SPACE MARK | 3 |
| U+2000 to U+200A | Da EN QUAD a HAIR SPACE, 11 caratteri | 3 ciascuno |
| U+202F | NARROW NO-BREAK SPACE | 3 |
| U+205F | MEDIUM MATHEMATICAL SPACE | 3 |
| U+3000 | IDEOGRAPHIC SPACE | 3 |
Un singolo U+202F costa tre byte dove uno spazio ne richiede uno solo, e la ricerca di "9:30 am" non corrisponderà a "9:30 am" se lo spazio intermedio è U+202F. Questa discrepanza è il motivo per cui gli spazi vengono normalizzati persino nel preset Standard.
9:30 am
9:30 amPuoi copiare e incollare il testo di esempio nella casella di input dello strumento sopra per vedere il risultato.
Trattini lunghi, virgolette curve e trattini facoltativi inseriti dagli editor
Le virgolette curve, i trattini lunghi e il trattino facoltativo U+00AD provengono solitamente dalle impostazioni di correzione automatica di un elaboratore di testi, non da un modello linguistico.
Unicode 17.0 assegna la proprietà Dash a 31 caratteri, dal comune U+002D sulla tastiera fino a U+2014 EM DASH e U+2E3A TWO-EM DASH. Solo uno di essi corrisponde alla pressione di un tasto. Gli altri compaiono quando il software interpreta ciò che intendevi scrivere. U+00AD è l'eccezione alla regola: viene stampato come trattino solo in corrispondenza di un a capo e resta invisibile in qualsiasi altro punto.
I trattini lunghi sono il dubbio che porta la maggior parte delle persone su una pagina come questa, e la risposta breve è che non dimostrano nulla. L'argomentazione completa è riportata più avanti, nella sezione dedicata ai trattini em.
Caratteri di tag e ad uso privato che nascondono istruzioni nel testo
I caratteri nel blocco Tags di Unicode, da U+E0000 a U+E007F, possono trasportare un'intera frase che nessun lettore umano vedrà mai. È così che gli aggressori introducono furtivamente istruzioni nascoste nel testo che un assistente IA leggerà in seguito.
L'AWS Security Blog ha trattato il contrabbando di caratteri Unicode il 30 settembre 2025, descrivendo i caratteri tag che "inizialmente progettati come marcatori invisibili per indicare la lingua all'interno del testo" sono "emersi come un potenziale vettore per la prompt injection". Una nota di ricerca della Cloud Security Alliance del 10 marzo 2026 ha rintracciato lo stesso stratagemma nelle skill degli agenti IA, nelle descrizioni degli strumenti e nei server MCP. Tale studio menziona il blocco Tags insieme a U+200B, U+200C, U+200D e U+FEFF.
Ne ho creato uno per verificarne le dimensioni. La frase visibile "Great work on the report." conta 25 caratteri e 25 byte. Ho aggiunto un'istruzione di 42 caratteri codificata in caratteri tag. Il file è cresciuto a 67 caratteri e 193 byte. Sullo schermo appaiono ancora solo cinque parole e un punto, ma uno script è riuscito a estrarre nuovamente l'istruzione intatta dal testo. Ciascun carattere tag costa quattro byte e zero pixel.
Great work on the report.Questa è la ragione principale per ripulire il testo che non ha nulla a che fare con il rilevamento dell'IA. Incollando un blocco di testo da una pagina web in un assistente di chat, potresti trasmettergli istruzioni che non hai mai digitato.
Rimozione dei caratteri invisibili nel browser: la procedura di scansione e pulizia
Questo strumento di pulizia esamina il testo non appena lo incolli, elenca ogni rilevamento con il relativo nome ufficiale Unicode e la posizione, e non modifica nulla finché non premi Pulisci testo.
La procedura prevede quattro passaggi:
- Incolla il testo o trascina un file .txt o .md.
- Esamina l'elenco dei rilevamenti, che indica ciascun carattere e la sua posizione.
- Scegli un preset oppure mantieni singoli rilevamenti che desideri preservare.
- Pulisci, poi copia il risultato o scaricalo.
Questo strumento di pulizia non riscrive, non parafrasa e non umanizza neppure una parola del tuo testo.
Confronto tra i preset Standard, Avanzato e Rigoroso
Lo Standard rimuove i caratteri che causano problemi nella normale scrittura, l'Avanzato amplia il raggio d'azione e il Rigoroso ne rimuove il maggior numero.
| Gruppo di caratteri | Standard | Avanzato | Rigoroso |
|---|---|---|---|
| Spazio a larghezza zero, unificatore di parole, indicatore dell'ordine dei byte | Rimosso | Rimosso | Rimosso |
| Controlli bidirezionali e controlli C0/C1 | Rimosso | Rimosso | Rimosso |
| Blocco tag e caratteri per uso privato | Rimosso | Rimosso | Rimosso |
| Trattino facoltativo U+00AD | Rimosso | Rimosso | Rimosso |
| Spazi insoliti nella categoria Zs | Convertito in U+0020 | Convertito in U+0020 | Convertito in U+0020 |
| Caratteri di giunzione U+200C e U+200D | Mantenuto | Rimosso al di fuori delle sequenze di emoji | Rimosso ovunque |
| Selettori di variazione | Mantenuto | Rimosso al di fuori delle sequenze di emoji | Rimosso ovunque |
| Virgolette curve e trattini lunghi | Mantenuto | Mantenuto | Convertito in virgolette dritte e trattino semplice |
Tre filtri a tocco singolo affiancano i preset: elimina invisibili, rimuovi trattini e rimuovi emoji. Pubblicare queste regole è una scelta deliberata. Ogni strumento concorrente nasconde il proprio set di regole dietro un unico pulsante, rendendo impossibile sapere cosa sia stato rimosso dal testo finché qualcosa non si rompe.
In che modo la protezione del codice Markdown mantiene intatti i blocchi di codice?
Con la modalità Markdown e la protezione attivate, lo strumento di pulizia ignora il codice delimitato e inline, in modo che uno snippet che necessita di un carattere specifico lo conservi.
Il codice è l'unico contesto in cui un carattere che nella prosa definiresti spazzatura ha una funzione strutturale. Un'espressione regolare o una stringa di test possono dipendere dal fatto che un indicatore dell'ordine dei byte si trovi esattamente dov'è.
Il tuo testo lascia mai il tuo dispositivo?
No. Sia la scansione che la pulizia vengono eseguite interamente nel tuo browser, e la pagina non carica né memorizza mai il tuo testo.
La seconda metà, per trasparenza, va detta subito. Questa pagina è gratuita, quindi può mostrare annunci pubblicitari e utilizzare sistemi di analisi del sito. Il report JSON opzionale registra cosa è cambiato, ma non contiene alcuna parte del tuo testo.
Limiti di testo e file: 20.000 parole e 1 MB
Lo strumento di pulizia accetta fino a 20.000 parole di testo incollato, oppure un singolo file UTF-8 fino a 1 MB in formato .txt o .md.
Tutto il resto è fuori portata: niente HTML, DOCX, PDF, JSON o CSV, e il testo incollato viene acquisito esclusivamente come testo normale. È richiesto JavaScript. Non servono account né pagamenti. L'interfaccia è disponibile in 25 lingue. I nomi ufficiali Unicode rimangono in inglese in tutte le lingue, poiché un nome di carattere tradotto non è più un nome citabile.
Per le foto invece del testo, puoi rimuovere le informazioni IA dall'immagine oppure modificare i metadati dell'immagine.
Marcatura del testo IA per fornitore: confronto tra ChatGPT, Claude, Gemini e Grok
Solo alcuni fornitori di IA contrassegnano il testo in uscita, e tutti quelli che lo fanno utilizzano la scelta dei vocaboli anziché caratteri nascosti.
| Fornitore | Contrassegna il testo | Metodo | Rilevato da questo pulitore | Fonte e data |
|---|---|---|---|---|
| Anthropic, Claude | Sì | Filigrana basata sulla selezione dei token, una versione di SynthID Text | No | Anthropic, annuncio dell'11 agosto 2026, nota tecnica del 14 agosto 2026, aggiornata il 1° settembre 2026 |
| Google, Gemini | Sì | SynthID Text, modulazione della probabilità dei token | No | Google DeepMind, 14 maggio 2024, reso open source più avanti nello stesso anno |
| OpenAI, ChatGPT | Nessuna filigrana di testo confermata | Nessuno in produzione per il testo. Le immagini contengono C2PA e SynthID, l'audio contiene SynthID | Non applicabile | Articolo della guida OpenAI sulla provenienza, aggiornato al 2 settembre 2026 |
| xAI, Grok | Nessun impegno pubblicato | Nessuno dichiarato | Non applicabile | xAI non ha sottoscritto il Codice di buone pratiche sulla trasparenza della Commissione, segnalato il 12 agosto 2026 |
Anthropic afferma che i modelli lanciati il 2 agosto 2026 o successivamente includono la marcatura fin dal rilascio, e sta lavorando per aggiungerla anche ai modelli precedenti a tale data. Il rilevamento della filigrana testuale non è uno strumento di verifica pubblico: Anthropic dichiara che la rilevazione "is currently in private preview, available to eligible organizations as required under EU law". L'elenco degli aventi diritto comprende autorità di regolamentazione, forze dell'ordine, media, fact-checker, ricercatori, istituti d'istruzione e organizzazioni della società civile dell'UE. Il tool gratuito Claude Content Checker offerto da Anthropic legge le C2PA Content Credentials sui file generati, cosa del tutto diversa da una filigrana nel testo.
Il fatto che xAI non abbia firmato il Codice di buone pratiche non esonera Grok dall'AI Act stesso. Un codice volontario rappresenta un percorso verso la conformità, non un sostituto della legge.
Come funziona la filigrana di testo di Claude?
Claude sceglie tra vocaboli altrettanto validi, e una chiave segreta determina quale selezionare. La filigrana è la sequenza stessa delle scelte, non un carattere presente nel testo.
Anthropic descrive il meccanismo chiaramente: "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'azienda precisa inoltre che la filigrana di testo di Claude "is a version of the SynthID-Text approach published by Google DeepMind in a Nature paper in 2024".
Sulla robustezza, Anthropic è specifica: "Light editing probably won't remove the watermark completely", mentre una riscrittura completa in cui ogni singola parola viene sostituita la rimuoverà del tutto.
Cosa contrassegna SynthID Text nell'output di Gemini?
SynthID Text incorpora il proprio schema nelle probabilità dei token durante la scrittura da parte di Gemini. Google DeepMind ha annunciato la filigrana di testo SynthID per l'app e l'esperienza web di Gemini il 14 maggio 2024. Il metodo agisce "by introducing additional information in the token distribution at the point of generation by modulating the likelihood of tokens being generated". Più avanti nello stesso anno, DeepMind ha reso il metodo open source tramite il suo Responsible Generative AI Toolkit.
Le limitazioni pubblicate contano quanto il metodo stesso. SynthID Text funziona al meglio su risposte più lunghe e variegate, mentre offre prestazioni scarse su risposte fattuali brevi, dove il modello non ha quasi alcuna libertà di formulazione. Il livello di affidabilità diminuisce ulteriormente quando il testo viene riscritto a fondo o tradotto.
Caratteri nascosti rilevati e paternità dell'IA: perché l'uno non dimostra mai l'altra?
Un carattere nascosto è la prova che qualcosa ha elaborato il tuo testo, non la prova che sia stata un'IA a scriverlo.
Ogni carattere invisibile ha una spiegazione ordinaria che esisteva ben prima della scrittura tramite IA. Elaboratori di testi, sistemi di gestione dei contenuti (CMS) ed esportatori PDF li inseriscono da decenni. Un rilevamento indica semplicemente che il testo è passato attraverso un software, cosa vera per quasi ogni frase pubblicata oggi.
Da dove provengono i caratteri invisibili oltre all'IA?
Elaboratori di testi, editor web, esportazioni PDF, strumenti di traduzione, app di messaggistica e il semplice copia e incolla inseriscono tutti caratteri invisibili in modo autonomo.
| Fonte | Caratteri comunemente aggiunti | Motivo |
|---|---|---|
| Elaboratori di testi | U+00A0, U+2019, U+2014, U+00AD | Correzione automatica e sillabazione automatica |
| Editor web e CMS | U+200B, U+FEFF | Suggerimenti di interruzione di riga e marcatori di codifica del file |
| Esportazioni PDF | U+2009, U+202F, U+00A0 | Preservare la spaziatura tipografica quando il testo viene ricopiato |
| Strumenti di traduzione e localizzazione | U+200C, U+200D, U+061C | Resa corretta delle scritture araba, persiana e indiane |
| App di chat e messaggistica | U+200D, U+FE0F | Sequenze di emoji e presentazione come testo o emoji |
| Copia e incolla tra app | U+FEFF, spazi Zs misti | Conversione della codifica negli appunti |
La mia frase di prova da 40 byte ha prodotto quattro rilevamenti senza essere mai entrata in contatto con un modello linguistico. L'intera argomentazione è racchiusa in questa singola misurazione.
Perché i trattini lunghi non sono una filigrana
Un trattino lungo è un normale segno di punteggiatura che scrittori, editor e correttori automatici usano da secoli, quindi non fornisce alcun indizio su chi abbia scritto una frase.
L'aggiornamento del 2025 chiude la questione. Il 14 novembre 2025 OpenAI ha dichiarato che ChatGPT avrebbe finalmente rispettato un'istruzione personalizzata per smettere di usare i trattini lunghi. Sam Altman lo ha spiegato chiaramente quel giorno: "If you tell ChatGPT not to use em-dashes in your custom instructions, it finally does what it's supposed to do". Un'abitudine che un utente può disattivare nelle impostazioni di personalizzazione non è mai stata una filigrana: era solo uno schema stilistico appreso durante l'addestramento, e la correzione è stata semplicemente una preferenza.
Questo strumento di pulizia continua a offrire la rimozione dei trattini, e la ragione è del tutto trasparente. Si tratta di un filtro di stile per chi desidera virgolette dritte e trattini semplici nel proprio testo. Non è un filtro per filigrane e non cambierà il giudizio di alcun rilevatore sul tuo testo.
Quando la pulizia danneggia il testo: persiano, arabo, scritture indiane ed emoji
La rimozione dei caratteri a larghezza zero può alterare un testo corretto, poiché alcune scritture ne hanno bisogno per comporre correttamente le parole.
Ho analizzato i quattro casi che si corrompono più di frequente e ho registrato esattamente l'esito. La parola persiana میخواهم è composta da otto caratteri, e il carattere U+200C al centro impedisce alle due parti di unirsi. Se lo elimini ottieni میخواهم, sette caratteri e una forma grafica diversa. In devanagari, क्ष contiene un U+200D che crea la corretta congiunzione; rimuoverlo modifica la forma visualizzata sullo schermo. L'emoji della famiglia 👨👩👧👦 è formata da sette punti di codice, quattro figure tenute insieme da tre caratteri di giunzione U+200D. Rimuovendo le giunzioni, si scompone in 👨👩👧👦, quattro persone separate. Un cuore rosso ❤️ include U+FE0F per essere visualizzato come emoji; senza di esso, lo stesso punto di codice si riduce a un simbolo di testo, ❤.
Ecco perché lo strumento mostra i rilevamenti prima di eseguire qualsiasi pulizia, perché i singoli risultati possono essere mantenuti e perché il preset Rigoroso non è quello predefinito. Un editor che lavora in una sola lingua vede un risultato pulito; un editor che lavora in sei lingue vede una segnalazione di errore.
Verdetto finale sulla pulizia delle filigrane di testo IA
Pulire i caratteri invisibili è un'operazione utile per ottenere un testo pulito, portabile e sicuro.
Due motivi giustificano l'uso di questo strumento. Il primo è che i caratteri nascosti corrompono i dati in modo silenzioso: nei risultati di ricerca, nelle formule dei fogli di calcolo, nel codice e negli URL. Il secondo è che i caratteri tag possono trasmettere a un assistente IA istruzioni che nessuno ha digitato e che nessuno può vedere. Questo rende la pulizia una prassi di sicurezza anziché un semplice ritocco estetico.
Chi spera di neutralizzare la filigrana di un fornitore sta agendo sul livello sbagliato. Claude e Gemini contrassegnano il testo attraverso la scelta dei vocaboli, OpenAI contrassegna immagini e audio ma non il testo, e nessuna eliminazione di caratteri può scalfire tali metodi. Un modo per aggirare queste filigrane statistiche consiste nel tradurre il testo in un paio di lingue diverse per poi ritradurlo in quella originale.
Incolla una pagina del tuo testo nella casella di input in alto e leggi i rilevamenti per comprendere meglio la struttura del testo, oppure copia semplicemente l'output.
Per ora è tutto. Grazie per aver letto fin qui.