Marcas de agua de texto IA: caracteres ocultos frente a marcas de selección de tokens
Las marcas de agua de texto IA vienen en dos formas, y solo una está hecha de caracteres que se pueden borrar.
| Tipo de marca de agua | Dónde vive | Visible para esta herramienta | Eliminable por esta herramienta |
|---|---|---|---|
| Marcas de caracteres ocultos | En los bytes del texto, como puntos de código invisibles o inusuales | Sí | Sí |
| Marcas de selección de tokens | En las propias elecciones de palabras | No | No |
Las marcas de caracteres ocultos son puntos de código que su editor de texto almacena y su pantalla nunca dibuja.
Las marcas de selección de tokens las lleva la palabra que el modelo eligió en cada paso, así que no dejan ningún carácter que encontrar ni que quitar. Toda herramienta de IA que hoy marca la salida de texto usa este tipo.
¿Qué hace invisible a un carácter Unicode?
Un carácter es invisible cuando no ocupa ancho en pantalla. Unicode registra ese comportamiento con la propiedad Default_Ignorable_Code_Point y con la categoría general Cf, formato.
Default_Ignorable_Code_Point es una propiedad derivada, publicada como lista de texto plano en DerivedCoreProperties.txt para cada versión del estándar. Este limpiador fija Unicode 17.0, publicado el 9 de septiembre de 2025, que añadió 4.803 caracteres nuevos y llevó el total codificado a 159.801.
Extraje los datos de propiedades de Unicode 17.0 y los conté yo mismo. 4.174 puntos de código llevan Default_Ignorable_Code_Point, pero solo 405 son caracteres asignados. Los otros 3.769 son ranuras reservadas que aún no usa nada. De los 405, 256 son selectores de variación y 97 están en el bloque Tags, lo que deja 52 que aparecen en escritura ordinaria.
La categoría Cf contiene 170 caracteres en la misma versión. Por eso un número redondo de marketing como «104 caracteres ocultos» no dice nada por sí solo. Sin una versión de Unicode impresa al lado, el número no se puede contrastar con nada.
¿Por qué las marcas de agua de selección de tokens sobreviven a la limpieza de caracteres?
Una selección de tokens, también llamada marca de agua estadística, se almacena en las palabras que eligió el modelo, así que borrar caracteres invisibles no limpia las marcas estadísticas.
Ningún limpiador de marcas de agua de texto en internet puede eliminar una marca de agua de selección de tokens o estadística, porque el algoritmo que usan las herramientas de IA es propietario.
¿ChatGPT pone una marca de agua en su texto?
OpenAI dice que no. El 20 de abril de 2025 Rumidocs informó de que las respuestas de GPT o3 y o4 mini contenían U+202F, el NARROW NO-BREAK SPACE. OpenAI respondió dos días después. Los caracteres eran «a quirk of large-scale reinforcement learning» y no una marca de agua. Rumidocs actualizó el artículo el 23 de abril de 2025 para decir que los caracteres especiales habían dejado de aparecer.
OpenAI sí construyó un método de marca de agua de texto en 2024 y nunca lo lanzó. Su artículo actual de ayuda sobre procedencia enumera qué lleva una señal hoy: las imágenes reciben C2PA Content Credentials y SynthID, el audio recibe SynthID, y el texto no recibe ninguno. La misma página afirma que «our goal is to expand provenance signals to all modalities including text», que es un plan más que un producto.
La respuesta honesta es breve. ChatGPT no marca su texto con una marca de agua, y los caracteres que la gente encontró en 2025 fueron un error que se corrigió.
Tipos de caracteres invisibles hallados en la salida de ChatGPT y Claude
Los caracteres que encuentra este limpiador se agrupan en cinco: caracteres de ancho cero, espacios inusuales, caracteres de control, puntuación de aspecto similar, y caracteres de etiqueta o de uso privado.
| Grupo | Ejemplos | Qué hace | Preajuste Estándar |
|---|---|---|---|
| Caracteres de ancho cero | U+200B, U+200C, U+200D, U+2060, U+FEFF | No ocupa ancho, pero se guarda en el archivo | Elimina U+200B, U+2060, U+FEFF y conserva los dos unificadores |
| Espacios inusuales | U+00A0, U+2009, U+202F, U+3000 | Parece un espacio, ordena y busca como un carácter distinto | Convierte a un espacio normal |
| Caracteres de control | Rangos C0 y C1, controles bidireccionales | Dirige el renderizado o rompe analizadores, nunca imprime | Elimina todo fuera de tabulador y salto de línea |
| Puntuación de aspecto similar | Comillas tipográficas, rayas en y em, U+00AD | Imprime, pero no como el carácter que tecleó | Lo deja igual |
| Etiqueta y uso privado | U+E0000 a U+E007F, área de uso privado | Transporta texto legible que ningún humano ve | Elimina |
Este es el ejemplo recurrente que usé para cada medición de esta página. La frase "The meeting starts at 9:30 am on 12 May." tiene 40 caracteres y 40 bytes cuando se teclea directamente en un editor de texto plano. Tras un viaje por un procesador de textos y de vuelta salió con 42 caracteres y 49 bytes. Dentro había una marca de orden de bytes al frente, un espacio de ancho cero tras "am" y dos espacios ordinarios cambiados en silencio por U+202F y U+00A0. Nueve bytes de más. Nada visible cambió.
The meeting starts at 9:30 am on 12 May.Caracteres de ancho cero: U+200B, U+200C, U+200D, U+2060 y U+FEFF
Los caracteres de ancho cero no ocupan espacio en pantalla pero siguen existiendo en el archivo, por eso el texto pegado puede llevar marcas que nadie ve.
| Punto de código | Nombre oficial Unicode | Función real |
|---|---|---|
| U+200B | ZERO WIDTH SPACE | Marca una oportunidad de salto de línea, casi siempre insertada por editores web |
| U+200C | ZERO WIDTH NON-JOINER | Mantiene letras separadas en palabras persas y árabes |
| U+200D | ZERO WIDTH JOINER | Une emojis en una sola imagen y forma conjunciones en escrituras índicas |
| U+2060 | WORD JOINER | Impide un salto de línea en ese punto |
| U+FEFF | ZERO WIDTH NO-BREAK SPACE | La marca de orden de bytes, suele dejarla un editor de texto y no una IA |
Dos de esos cinco son caracteres de trabajo, no basura. U+200C y U+200D llevan significado en idiomas reales, por eso el preajuste Estándar los deja donde están.
Espacios inusuales: U+00A0, U+2009, U+202F y U+3000
Los espacios inusuales parecen un espacio ordinario pero llevan un punto de código distinto, lo que rompe la búsqueda, el orden y el código.
Unicode 17.0 define 17 caracteres en la categoría Zs, separador de espacio, y solo uno es el espacio de su teclado. Listé los 17 de la base de caracteres con sus anchos en bytes UTF-8, porque el ancho en bytes es lo que los encarece.
| Punto de código | Nombre oficial Unicode | Bytes UTF-8 |
|---|---|---|
| U+0020 | SPACE | 1 |
| U+00A0 | NO-BREAK SPACE | 2 |
| U+1680 | OGHAM SPACE MARK | 3 |
| U+2000 to U+200A | EN QUAD hasta HAIR SPACE, 11 caracteres | 3 cada uno |
| U+202F | NARROW NO-BREAK SPACE | 3 |
| U+205F | MEDIUM MATHEMATICAL SPACE | 3 |
| U+3000 | IDEOGRAPHIC SPACE | 3 |
Un solo U+202F cuesta tres bytes donde un espacio cuesta uno, y una búsqueda de "9:30 am" no coincidirá con "9:30 am" cuando el hueco sea U+202F. Ese desajuste es la razón por la que los espacios se normalizan incluso en el preajuste Estándar.
9:30 am
9:30 amPuede copiar y pegar el texto de ejemplo en el cuadro de entrada de la herramienta de arriba para ver el resultado.
Rayas, comillas tipográficas y guiones suaves que insertan los editores
Las comillas tipográficas, las rayas largas y el guion suave U+00AD suelen venir de la autocorrección de un procesador de textos, no de un modelo de lenguaje.
Unicode 17.0 otorga la propiedad Dash a 31 caracteres, desde el U+002D simple de su teclado hasta U+2014 EM DASH y U+2E3A TWO-EM DASH. Solo uno es una pulsación de teclado. El resto llega cuando el software decide lo que quiso decir. U+00AD es la excepción, porque imprime como guion solo cuando una línea se parte ahí y permanece invisible en el resto de sitios.
Las rayas son la pregunta que trae a la mayoría a una página como esta, y la respuesta corta es que no prueban nada. El argumento completo está más abajo en la sección sobre rayas em.
Caracteres de etiqueta y de uso privado que ocultan instrucciones en el texto
Los caracteres del bloque Unicode Tags, U+E0000 a U+E007F, pueden llevar una frase completa que ningún lector humano verá jamás. Así es como los atacantes introducen instrucciones ocultas en texto que un asistente de IA leerá después.
El AWS Security Blog cubrió el contrabando de caracteres Unicode el 30 de septiembre de 2025. Describe caracteres de etiqueta que fueron «Initially designed as invisible markers for indicating language within text» y han «emerged as a potential vector for prompt injection». Una nota de investigación de la Cloud Security Alliance del 10 de marzo de 2026 rastreó el mismo truco en skills de agentes de IA, descripciones de herramientas y servidores MCP. Ese trabajo nombra el bloque Tags junto a U+200B, U+200C, U+200D y U+FEFF.
Construí uno para ver su tamaño. La frase visible "Great work on the report." tiene 25 caracteres y 25 bytes. Añadí una instrucción de 42 caracteres codificada en caracteres de etiqueta. El archivo creció a 67 caracteres y 193 bytes. En pantalla sigue leyéndose como cinco palabras y un punto, y un script sacó la instrucción intacta de la copia. Cada carácter de etiqueta cuesta cuatro bytes y cero píxeles.
Great work on the report.Esta es la razón más fuerte para limpiar texto que no tiene nada que ver con la detección de IA. Pegue un bloque de copia de una página web en un asistente de chat y puede estar entregándole instrucciones que nunca tecleó.
Eliminación de caracteres invisibles en su navegador: el flujo de escaneo y limpieza
Este limpiador escanea su texto en el momento en que lo pega, enumera cada hallazgo con su nombre oficial Unicode y su posición, y no cambia nada hasta que pulse Limpiar texto.
La secuencia tiene cuatro pasos:
- Pegue su texto o suelte un archivo .txt o .md.
- Revise la lista de hallazgos, que nombra cada carácter y dónde está.
- Elija un preajuste, o conserve hallazgos individuales que quiera proteger.
- Limpie, luego copie el resultado o descárguelo.
Este limpiador no reescribe, parafrasea ni humaniza ni una sola palabra de su texto.
Comparación de preajustes Estándar, Avanzado y Estricto
Estándar elimina los caracteres que causan problemas en la escritura normal, Avanzado amplía la red y Estricto elimina lo máximo.
| Grupo de caracteres | Estándar | Avanzado | Estricto |
|---|---|---|---|
| Espacio de ancho cero, unificador de palabras, marca de orden de bytes | Eliminado | Eliminado | Eliminado |
| Controles bidireccionales y controles C0/C1 | Eliminado | Eliminado | Eliminado |
| Bloque Tags y caracteres de uso privado | Eliminado | Eliminado | Eliminado |
| Guion suave U+00AD | Eliminado | Eliminado | Eliminado |
| Espacios inusuales de la categoría Zs | Convertido a U+0020 | Convertido a U+0020 | Convertido a U+0020 |
| Unificadores U+200C y U+200D | Conservado | Eliminado fuera de secuencias de emoji | Eliminado en todas partes |
| Selectores de variación | Conservado | Eliminado fuera de secuencias de emoji | Eliminado en todas partes |
| Comillas tipográficas y rayas largas | Conservado | Conservado | Convertido a comillas rectas y un guion simple |
Tres filtros de un toque acompañan a los preajustes: eliminar invisibles, quitar rayas y guiones, y quitar emojis. Publicar estas reglas es deliberado. Toda herramienta competidora oculta su conjunto de reglas tras un solo botón, así que no puede saber qué se quitó de su texto hasta que algo se rompe.
¿Cómo la protección de código Markdown mantiene intactos los bloques de código?
Con el modo Markdown y la protección activados, el limpiador omite el código delimitado e inline, de modo que un fragmento que necesita un carácter exacto lo conserva.
El código es el único lugar donde un carácter que en prosa llamaría basura es estructural. Una expresión regular o una cadena de prueba pueden depender de que una marca de orden de bytes esté exactamente donde está.
¿Su texto sale de su dispositivo?
No. El escaneo y la limpieza se ejecutan en su navegador, y la página nunca sube ni almacena su texto.
La segunda mitad honesta va en el mismo aliento. Esta página es gratuita, así que aún puede mostrar anuncios y usar analítica del sitio. El informe JSON opcional registra qué cambió. No lleva nada de su texto.
Límites de texto y archivo: 20.000 palabras y 1 MB
El limpiador acepta hasta 20.000 palabras de texto pegado, o un archivo UTF-8 de hasta 1 MB en formato .txt o .md.
Todo lo demás queda fuera de alcance: no HTML, DOCX, PDF, JSON ni CSV, y el pegado llega solo como texto plano. Se requiere JavaScript. No hay cuenta ni pago. La interfaz se ofrece en 26 idiomas. Los nombres oficiales Unicode permanecen en inglés en todos ellos, porque un nombre de carácter traducido ya no es un nombre que se pueda citar.
Para fotos en lugar de texto, puede eliminar la info de IA de la imagen o editar los metadatos de la imagen.
Marcado de texto IA por proveedor: comparación de ChatGPT, Claude, Gemini y Grok
Solo algunos proveedores de IA marcan su salida de texto, y todos los que lo hacen usan la elección de palabras en lugar de caracteres ocultos.
| Proveedor | Marca el texto | Método | Encontrado por este limpiador | Fuente y fecha |
|---|---|---|---|---|
| Anthropic, Claude | Sí | Marca de agua de selección de tokens, una versión de SynthID Text | No | Anthropic, anuncio del 11 de agosto de 2026, nota técnica del 14 de agosto de 2026, actualizado el 1 de septiembre de 2026 |
| Google, Gemini | Sí | SynthID Text, modulación de probabilidad de tokens | No | Google DeepMind, 14 de mayo de 2024, código abierto más tarde ese mismo año |
| OpenAI, ChatGPT | Sin marca de agua de texto confirmada | Ninguno en producción para texto. Las imágenes llevan C2PA y SynthID, el audio lleva SynthID | No aplicable | Artículo de ayuda de procedencia de OpenAI, vigente a 2 de septiembre de 2026 |
| xAI, Grok | Sin compromiso publicado | Ninguno declarado | No aplicable | xAI no firmó el Código de prácticas de transparencia de la Comisión, informado el 12 de agosto de 2026 |
Anthropic dice que los modelos lanzados el 2 de agosto de 2026 o después llevan la marca desde el lanzamiento. Trabaja en añadir el marcado a modelos publicados antes de esa fecha. La detección de marcas de agua de texto no es un comprobador público. Anthropic afirma que la detección «is currently in private preview, available to eligible organizations as required under EU law». La lista de elegibles incluye reguladores, fuerzas del orden, medios, verificadores de hechos, investigadores, organismos educativos y grupos de la sociedad civil de la UE. El Claude Content Checker gratuito que Anthropic también ofrece lee C2PA Content Credentials en archivos generados, que es algo distinto de una marca de agua de texto.
Que xAI no firme el Código de prácticas no exime a Grok de la propia AI Act. Un código voluntario es una vía de cumplimiento, no un sustituto de la ley.
¿Cómo funciona el marcado de agua de texto de Claude?
Claude elige entre palabras igualmente buenas, y una clave secreta decide cuál toma. La marca es la secuencia de elecciones, no ningún carácter del texto.
Anthropic describe el mecanismo con claridad. «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.» La empresa también afirma que la marca de agua de texto de Claude «is a version of the SynthID-Text approach published by Google DeepMind in a Nature paper in 2024».
Sobre la robustez Anthropic es concreto. «Light editing probably won't remove the watermark completely», y una reescritura completa en la que se reemplaza cada palabra sí la elimina.
¿Qué marca SynthID Text en la salida de Gemini?
SynthID Text incrusta su patrón en las probabilidades de tokens mientras Gemini escribe. Google DeepMind anunció el marcado de agua de texto SynthID para la app Gemini y la experiencia web el 14 de mayo de 2024. El método funciona «by introducing additional information in the token distribution at the point of generation by modulating the likelihood of tokens being generated». DeepMind abrió el método más tarde ese mismo año a través de su Responsible Generative AI Toolkit.
Las limitaciones publicadas importan tanto como el método. SynthID Text funciona mejor en respuestas más largas y variadas. Rinde mal en respuestas factuales cortas, donde el modelo casi no tiene libertad de redacción. La confianza cae otra vez cuando el texto se reescribe a fondo o se traduce.
Hallazgos de caracteres ocultos y autoría de IA: ¿por qué uno nunca prueba lo otro?
Un carácter oculto es evidencia de que algo procesó su texto, no evidencia de que una IA lo escribió.
Cada carácter invisible tiene una explicación ordinaria que existía antes de la escritura con IA. Los procesadores de textos, los sistemas de gestión de contenidos y los exportadores PDF los insertan desde hace décadas. Un hallazgo le dice que el texto ha pasado por software, lo cual es cierto de casi cada frase que alguien publica.
¿De dónde vienen los caracteres invisibles además de la IA?
Los procesadores de textos, editores web, exportaciones PDF, herramientas de traducción, apps de chat y el simple copiar y pegar insertan caracteres invisibles por sí solos.
| Fuente | Caracteres que suele añadir | Por qué |
|---|---|---|
| Procesadores de textos | U+00A0, U+2019, U+2014, U+00AD | Autocorrección y separación silábica automática |
| Editores web y CMS | U+200B, U+FEFF | Pistas de salto de línea y marcadores de codificación de archivo |
| Exportaciones PDF | U+2009, U+202F, U+00A0 | Preservar el espaciado tipográfico al copiar el texto de vuelta |
| Herramientas de traducción y localización | U+200C, U+200D, U+061C | Renderizado correcto de escrituras árabe, persa e índicas |
| Apps de chat y mensajería | U+200D, U+FE0F | Secuencias de emoji y presentación de texto o emoji |
| Copiar y pegar entre apps | U+FEFF, espacios Zs mezclados | Conversión de codificación en el portapapeles |
Mi propia frase de prueba de 40 bytes acumuló cuatro hallazgos sin encontrarse nunca con un modelo de lenguaje. Ese es todo el argumento en una sola medición.
Por qué las rayas em no son una marca de agua
Una raya em es un signo de puntuación normal que escritores, editores y la autocorrección han usado durante siglos, así que no lleva ninguna señal sobre quién escribió una frase.
La corrección de 2025 lo zanja. OpenAI dijo el 14 de noviembre de 2025 que ChatGPT por fin obedecería una instrucción personalizada para dejar de usar rayas em. Sam Altman lo dijo con claridad ese día: «If you tell ChatGPT not to use em-dashes in your custom instructions, it finally does what it's supposed to do». Un hábito que un usuario puede apagar en un ajuste de personalización nunca fue una marca. Fue un patrón de estilo aprendido en el entrenamiento, y la corrección fue una preferencia.
Este limpiador sigue ofreciendo quitar rayas, y el motivo es honesto. Es un filtro de estilo para quien quiere comillas rectas y guiones simples en su copia. No es un filtro de marcas de agua, y no cambiará lo que diga ningún detector sobre su texto.
Cuando la limpieza rompe el texto: persa, árabe, escrituras índicas y emoji
Eliminar caracteres de ancho cero puede romper texto correcto, porque algunas escrituras los necesitan para deletrear bien las palabras.
Ejecuté los cuatro casos que más se rompen y registré exactamente qué ocurrió. La palabra persa میخواهم tiene ocho caracteres, y el U+200C del medio evita que las dos partes se unan. Bórrelo y obtiene میخواهم, siete caracteres y una forma escrita distinta. En devanagari, क्ष lleva un U+200D que forma la conjunción correcta, y quitarlo cambia la forma en pantalla. El emoji de familia 👨👩👧👦 son siete puntos de código, cuatro figuras unidas por tres unificadores U+200D. Quite los unificadores y se deshace en 👨👩👧👦, cuatro personas separadas. Un corazón rojo ❤️ lleva U+FE0F para renderizarse como emoji, y sin él el mismo punto de código vuelve a un símbolo de texto, ❤.
Por eso la herramienta muestra los hallazgos antes de limpiar nada, por qué se pueden conservar hallazgos individuales y por qué Estricto no es el valor predeterminado. Un editor que trabaja en un idioma ve un resultado limpio. Un editor que trabaja en seis ve un informe de error.
Veredicto final sobre la limpieza de marcas de agua de texto IA
Limpiar caracteres invisibles vale la pena para obtener texto limpio, portable y seguro.
Dos motivos justifican usar esta herramienta. El primero es que los caracteres ocultos rompen cosas, en silencio, en resultados de búsqueda, búsquedas en hojas de cálculo, código y URL. El segundo es que los caracteres de etiqueta pueden llevar instrucciones a un asistente de IA que nadie tecleó y nadie puede ver. Eso convierte la limpieza en un hábito de seguridad más que cosmético.
Quien espera derrotar una marca de agua de un proveedor está limpiando la capa equivocada. Claude y Gemini marcan el texto en las elecciones de palabras, OpenAI marca imágenes y audio pero no texto, y ninguna cantidad de limpieza de caracteres alcanza a ninguno. Una forma de debilitar estas marcas de agua estadísticas es traducir el texto a un par de idiomas distintos y luego volver a traducirlo al original.
Pegue una página de su propio texto en el cuadro de entrada de arriba y lea los hallazgos para entender mejor el texto, o simplemente copie la salida.
Eso es todo por ahora. Gracias por leer hasta aquí.