Perché il codice generato dall'IA si rompe
Un linter segnala un errore su una riga che sembra perfetta. Una richiesta API fallisce la validazione su un campo identico allo schema, stessa lunghezza, stessi caratteri. Il bug quasi mai è nella logica: è incastrato tra due lettere, invisibile, ed è arrivato lì perché hai incollato codice da una finestra di chat.
Il testo copiato da un'interfaccia di chat IA porta spesso caratteri Unicode invisibili, spazi a larghezza zero, giunzioni, spazi indivisibili, residui di come l'interfaccia rende la risposta come HTML tipografico. Non sono una filigrana e nessuno li ha messi lì di proposito. Sono anche del tutto invisibili in un editor normale, per questo causano errori di sintassi, lunghezze di stringa corrotte e chiamate API che falliscono senza motivo apparente. Incolla il codice nello strumento qui sotto: ognuno di essi viene mostrato.
Altro: cosa è stato trovato, vista a raggi X e opzioni
Vista a raggi X
Il tuo testo con ogni carattere nascosto esposto come etichetta. Passa il mouse per il nome Unicode.
Cosa è stato trovato
| Punto di codice | Carattere | Conteggio | Azione |
|---|
Cosa sono davvero questi caratteri
Punti di codice Unicode reali e standard, non malware, non una firma deliberata. Una giunzione a larghezza zero fonde due emoji in un solo glifo. Uno spazio indivisibile impedisce a un numero di staccarsi dalla sua unità. Un word joiner evita un'interruzione di riga indesiderata. Lavori legittimi, ma non dentro il nome di una variabile o una stringa SQL.
| Carattere | Punto di codice | A cosa serve | Cosa rompe nel codice |
|---|---|---|---|
| Spazio a larghezza zero | U+200B | Punto di interruzione riga in testo denso | Spezza gli identificatori, rompe le regex |
| Giunzione a larghezza zero | U+200D | Unisce sequenze di emoji | Cambia silenziosamente la lunghezza della stringa |
| Word joiner | U+2060 | Evita un'interruzione di riga | Corrompe i token confrontati o sottoposti a hash |
| Spazio indivisibile | U+00A0 | Tiene un numero unito alla sua unità | Sembra uno spazio, non lo è; i validatori lo rifiutano |
Nessuno di questi è visibile in un editor normale. Ecco il problema intero: la revisione del codice, il diff, i tuoi occhi, niente li intercetta, perché non c'è nulla di visibile da intercettare.
Dove colpisce davvero
Un linter fallisce su una riga perfetta
Di solito uno spazio a larghezza zero incuneato in un identificatore, che per il parser diventa due token invece di uno.
Un import CSV o database corrompe una riga
Un carattere estraneo trasforma un campo numerico pulito in testo, o supera un vincolo di lunghezza che nessuno ha impostato apposta.
Una chiamata API restituisce 400 senza causa visibile
I validatori JSON rigorosi non perdonano punti di codice inattesi dentro una stringa, e il corpo della richiesta sembra normale in ogni strumento che usi per controllarlo.
Vale la pena essere precisi: una vera filigrana statistica, quella che Anthropic e Google hanno iniziato a distribuire quest'anno, funziona in modo completamente diverso. Quel segnale vive nella scelta delle parole del modello, non in un carattere selezionabile. Questo è un problema separato e molto più banale, e a differenza di una filigrana statistica, è del tutto riparabile.
Domande frequenti
Questi caratteri sono una filigrana IA?
No. Nessun fornitore importante usa caratteri invisibili come filigrana: verrebbe eliminata da qualsiasi pulizia del testo, il che la renderebbe inutile allo scopo. Sono residui tipografici di come l'interfaccia di chat rende la risposta, non un segnale deliberato.
Pulire il codice ne rovina la formattazione?
No. Tab, a capo e indentazione restano esattamente come sono. Vengono toccati solo i punti di codice invisibili senza significato visibile, e gli spazi insoliti vengono sostituiti con uno spazio normale invece di essere eliminati.
Per approfondire
- Lo strumento in italiano.
- L'articolo completo (in inglese), con tabella ed esempi aggiuntivi.
- Come rimuovere le filigrane IA dal testo (in inglese).