AI Watermark Check

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 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.

CaratterePunto di codiceA cosa serveCosa rompe nel codice
Spazio a larghezza zeroU+200BPunto di interruzione riga in testo densoSpezza gli identificatori, rompe le regex
Giunzione a larghezza zeroU+200DUnisce sequenze di emojiCambia silenziosamente la lunghezza della stringa
Word joinerU+2060Evita un'interruzione di rigaCorrompe i token confrontati o sottoposti a hash
Spazio indivisibileU+00A0Tiene 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