AI Watermark Check

Por qué falla el código generado por IA, y cómo arreglar la causa real

Un linter marca error en una línea que se ve perfecta. Un JSON falla la validación en un campo que coincide exactamente con el esquema, misma longitud, mismos caracteres, todo igual. El fallo casi nunca está en tu lógica. Está entre dos letras, invisible, y llegó ahí porque copiaste el código desde una ventana de chat.

El texto copiado de una interfaz de chat de IA suele llevar caracteres Unicode invisibles, espacios de ancho cero, uniones, espacios de no separación, restos de cómo esa interfaz compone su respuesta como HTML con tipografía. No son una marca de agua y nadie los puso ahí a propósito. Tampoco se ven en un editor normal, por eso causan errores de sintaxis, longitudes de cadena corruptas y llamadas a la API que fallan sin explicación aparente. Pega el código en el comprobador de abajo y todos aparecen.

Más: qué se encontró, vista de rayos X y opciones

Vista de rayos X

Tu texto con cada carácter oculto expuesto como una etiqueta. Pasa el cursor para ver su nombre Unicode.

Qué son realmente estos caracteres

Puntos de código Unicode estándar, ni malware ni una firma deliberada. Una unión de ancho cero fusiona dos emoji en un solo glifo. Una unión de palabras evita que un renderizador corte la línea justo ahí. Trabajos legítimos, todos, solo que no dentro de un nombre de variable o una cadena SQL.

CarácterPunto de códigoPara qué sirveQué le hace al código
Espacio de ancho ceroU+200BMarca un punto de salto de línea en texto densoDivide identificadores, rompe coincidencias de regex \bpalabra\b
Unión de ancho ceroU+200DCombina secuencias de emojiCambia la longitud de la cadena en silencio; .length miente
Unión de palabrasU+2060Evita un salto de línea no deseadoCorrompe tokens que luego se comparan o se hashean
Espacio de no separaciónU+00A0Mantiene un número pegado a su unidadParece un espacio y no lo es; validadores de formularios y esquemas lo rechazan

Nada de esto se ve en un editor normal. Ese es el problema entero: tu revisión de código, tu diff, tus propios ojos, nada lo detecta, porque no hay nada visible que detectar.

Dónde te muerde esto en la práctica

Un linter falla en una línea perfecta

Casi siempre un espacio de ancho cero metido dentro de un identificador, que para el parser divide un token en dos.

Una importación CSV o de base de datos corrompe una fila

Un carácter suelto convierte un campo numérico limpio en texto, o empuja un valor más allá de un límite de longitud que nadie fijó a propósito.

Una llamada a la API devuelve 400 sin causa visible

Los validadores JSON estrictos no perdonan puntos de código inesperados dentro de un string, y el cuerpo de la petición se ve completamente normal en cualquier herramienta con la que lo revises.

Es importante ser preciso aquí: una marca de agua estadística real, del tipo que Anthropic y Google empezaron a desplegar este año, funciona de forma completamente distinta. Esa señal vive en qué palabras eligió el modelo, no en ningún carácter que puedas seleccionar. Ver la marca de Claude y SynthID de Gemini. Lo que rompe tu código es un problema aparte, mucho más mundano, y a diferencia de una marca estadística, sí se puede arreglar del todo.

Preguntas frecuentes sobre caracteres ocultos en código de IA

¿Estos caracteres son una marca de agua de IA?

No. Ningún proveedor importante usa caracteres invisibles como marca de agua, se eliminarían con cualquier paso de limpieza de texto, lo que los haría inútiles para ese fin. Son residuos tipográficos de cómo compone su respuesta la interfaz de chat, no una señal deliberada.

¿La limpieza puede romper el formato de mi código?

No. Tabulaciones, saltos de línea e indentación se conservan exactamente igual. Solo se tocan los puntos de código invisibles sin significado visible, y los espacios inusuales se sustituyen por un espacio normal en vez de borrarse.

Más información