Marcas d'água de texto de IA: caracteres ocultos versus marcas de seleção de tokens
As marcas d'água de texto de IA vêm em duas formas, e só uma é feita de caracteres que você pode apagar.
| Tipo de marca d'água | Onde vive | Visível para esta ferramenta | Removível por esta ferramenta |
|---|---|---|---|
| Marcas de caracteres ocultos | Nos bytes do texto, como pontos de código invisíveis ou incomuns | Sim | Sim |
| Marcas de seleção de tokens | Nas próprias escolhas de palavras | Não | Não |
As marcas de caracteres ocultos são pontos de código que seu editor de texto armazena e sua tela nunca desenha.
As marcas de seleção de tokens são carregadas pela palavra que o modelo escolheu em cada passo, então não deixam nenhum caractere para encontrar nem para remover. Toda ferramenta de IA que hoje marca a saída de texto usa esse tipo.
O que torna um caractere Unicode invisível?
Um caractere é invisível quando não ocupa largura na tela. O Unicode registra esse comportamento com a propriedade Default_Ignorable_Code_Point e com a categoria geral Cf, formato.
Default_Ignorable_Code_Point é uma propriedade derivada, publicada como lista de texto simples em DerivedCoreProperties.txt para cada versão do padrão. Este limpador fixa Unicode 17.0, lançado em 9 de setembro de 2025, que adicionou 4.803 novos caracteres e levou o total codificado a 159.801.
Extraí os dados de propriedades do Unicode 17.0 e contei eu mesmo. 4.174 pontos de código carregam Default_Ignorable_Code_Point, mas só 405 são caracteres atribuídos. Os outros 3.769 são slots reservados que nada usa ainda. Dos 405, 256 são seletores de variação e 97 ficam no bloco Tags, o que deixa 52 que aparecem na escrita comum.
A categoria Cf contém 170 caracteres na mesma versão. Por isso um número redondo de marketing como "104 caracteres ocultos" não diz nada sozinho. Sem uma versão Unicode impressa ao lado, o número não pode ser conferido com nada.
Por que as marcas d'água de seleção de tokens sobrevivem à limpeza de caracteres?
Uma seleção de tokens, também chamada marca d'água estatística, é armazenada nas palavras que o modelo escolheu, então apagar caracteres invisíveis não limpa as marcas estatísticas.
Nenhum limpador de marcas d'água de texto na internet consegue remover uma marca d'água de seleção de tokens ou estatística, porque o algoritmo usado pelas ferramentas de IA é proprietário.
O ChatGPT coloca uma marca d'água no texto?
A OpenAI diz que não. Em 20 de abril de 2025 a Rumidocs relatou que respostas do GPT o3 e o4 mini continham U+202F, o NARROW NO-BREAK SPACE. A OpenAI respondeu dois dias depois. Os caracteres eram "a quirk of large-scale reinforcement learning" e não eram uma marca d'água. A Rumidocs atualizou o artigo em 23 de abril de 2025 para dizer que os caracteres especiais tinham parado de aparecer.
A OpenAI construiu um método de marca d'água de texto em 2024 e nunca o lançou. Seu artigo atual de ajuda sobre proveniência lista o que carrega um sinal hoje: imagens recebem C2PA Content Credentials e SynthID, áudio recebe SynthID, e texto não recebe nenhum. A mesma página afirma que "our goal is to expand provenance signals to all modalities including text", o que é um plano e não um produto.
A resposta honesta é curta. O ChatGPT não marca o texto com marca d'água, e os caracteres que as pessoas encontraram em 2025 foram um bug corrigido.
Tipos de caracteres invisíveis encontrados na saída do ChatGPT e do Claude
Os caracteres que este limpador encontra se dividem em cinco grupos: caracteres de largura zero, espaços incomuns, caracteres de controle, pontuação semelhantes e caracteres de tag ou de uso privado.
| Grupo | Exemplos | O que faz | Predefinição Padrão |
|---|---|---|---|
| Caracteres de largura zero | U+200B, U+200C, U+200D, U+2060, U+FEFF | Não ocupa largura, mas ainda é armazenado no arquivo | Remove U+200B, U+2060, U+FEFF e mantém os dois unificadores |
| Espaços incomuns | U+00A0, U+2009, U+202F, U+3000 | Parece um espaço, ordena e pesquisa como um caractere diferente | Converte para um espaço normal |
| Caracteres de controle | Intervalos C0 e C1, controles bidirecionais | Direciona a renderização ou quebra analisadores, nunca imprime | Remove tudo fora de tabulação e newline |
| Pontuação semelhantes | Aspas tipográficas, travessões en e em, U+00AD | Imprime, mas não como o caractere que você digitou | Deixa como está |
| Tag e uso privado | U+E0000 a U+E007F, área de uso privado | Carrega texto legível que nenhum humano vê | Remove |
Este é o exemplo recorrente que usei para cada medição desta página. A frase "The meeting starts at 9:30 am on 12 May." tem 40 caracteres e 40 bytes quando digitada direto em um editor de texto simples. Depois de uma passagem por um processador de texto e de volta, saiu com 42 caracteres e 49 bytes. Dentro havia uma marca de ordem de bytes na frente, um espaço de largura zero depois de "am" e dois espaços comuns trocados em silêncio por U+202F e U+00A0. Nove bytes a mais. Nada visível mudou.
The meeting starts at 9:30 am on 12 May.Caracteres de largura zero: U+200B, U+200C, U+200D, U+2060 e U+FEFF
Caracteres de largura zero não ocupam espaço na tela, mas ainda existem no arquivo, por isso o texto colado pode carregar marcas que ninguém vê.
| Ponto de código | Nome oficial Unicode | Função real |
|---|---|---|
| U+200B | ZERO WIDTH SPACE | Marca uma oportunidade de quebra de linha, quase sempre inserida por editores web |
| U+200C | ZERO WIDTH NON-JOINER | Mantém letras separadas em palavras persas e árabes |
| U+200D | ZERO WIDTH JOINER | Une emojis em uma imagem e forma conjunções em escritas índicas |
| U+2060 | WORD JOINER | Impede uma quebra de linha nesse ponto |
| U+FEFF | ZERO WIDTH NO-BREAK SPACE | A marca de ordem de bytes, geralmente deixada por um editor de texto e não por uma IA |
Dois desses cinco são caracteres de trabalho, não lixo. U+200C e U+200D carregam significado em idiomas reais, razão pela qual a predefinição Padrão os deixa onde estão.
Espaços incomuns: U+00A0, U+2009, U+202F e U+3000
Espaços incomuns parecem um espaço comum, mas carregam um ponto de código diferente, o que quebra pesquisa, ordenação e código.
O Unicode 17.0 define 17 caracteres na categoria Zs, separador de espaço, e só um deles é o espaço do seu teclado. Listei os 17 da base de caracteres com suas larguras em bytes UTF-8, porque a largura em bytes é o que os torna caros.
| Ponto de código | Nome 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 até HAIR SPACE, 11 caracteres | 3 cada |
| U+202F | NARROW NO-BREAK SPACE | 3 |
| U+205F | MEDIUM MATHEMATICAL SPACE | 3 |
| U+3000 | IDEOGRAPHIC SPACE | 3 |
Um único U+202F custa três bytes onde um espaço custa um, e uma pesquisa por "9:30 am" não corresponde a "9:30 am" quando a lacuna é U+202F. Esse descompasso é a razão pela qual os espaços são normalizados mesmo na predefinição Padrão.
9:30 am
9:30 amVocê pode copiar e colar o texto de exemplo na caixa de entrada da ferramenta acima para ver o resultado.
Travessões, aspas tipográficas e hífens suaves que os editores inserem
Aspas tipográficas, travessões longos e o hífen suave U+00AD costumam vir da autocorreção de um processador de texto, não de um modelo de linguagem.
O Unicode 17.0 dá a propriedade Dash a 31 caracteres, do U+002D simples do teclado a U+2014 EM DASH e U+2E3A TWO-EM DASH. Só um é um toque de teclado. O resto chega quando o software decide o que você quis dizer. U+00AD é a exceção, porque imprime como hífen só quando uma linha quebra ali e permanece invisível em todos os outros lugares.
Travessões são a pergunta que traz a maioria das pessoas a uma página como esta, e a resposta curta é que eles não provam nada. O argumento completo fica mais abaixo na seção sobre travessões em.
Caracteres de tag e de uso privado que escondem instruções no texto
Caracteres no bloco Unicode Tags, U+E0000 a U+E007F, podem carregar uma frase completa que nenhum leitor humano jamais verá. É assim que atacantes introduzem instruções ocultas em texto que um assistente de IA lerá depois.
O AWS Security Blog abordou o contrabando de caracteres Unicode em 30 de setembro de 2025. Descreve caracteres de tag que foram "Initially designed as invisible markers for indicating language within text" e "emerged as a potential vector for prompt injection". Uma nota de pesquisa da Cloud Security Alliance datada de 10 de março de 2026 rastreou o mesmo truque em skills de agentes de IA, descrições de ferramentas e servidores MCP. Esse trabalho nomeia o bloco Tags junto com U+200B, U+200C, U+200D e U+FEFF.
Eu montei um para ver o tamanho. A frase visível "Great work on the report." tem 25 caracteres e 25 bytes. Acrescentei uma instrução de 42 caracteres codificada em caracteres de tag. O arquivo cresceu para 67 caracteres e 193 bytes. Na tela ainda se lê como cinco palavras e um ponto, e um script tirou a instrução intacta da cópia. Cada caractere de tag custa quatro bytes e zero pixels.
Great work on the report.Este é o motivo mais forte para limpar texto que não tem nada a ver com detecção de IA. Cole um bloco de texto de uma página web em um assistente de chat e você pode estar entregando instruções que nunca digitou.
Remoção de caracteres invisíveis no navegador: o fluxo de varredura e limpeza
Este limpador analisa seu texto no momento em que você cola, lista cada detecção com o nome oficial Unicode e a posição, e não muda nada até você pressionar Limpar texto.
A sequência tem quatro passos:
- Cole seu texto ou solte um arquivo .txt ou .md.
- Revise a lista de detecções, que nomeia cada caractere e onde ele está.
- Escolha uma predefinição, ou mantenha detecções individuais que quiser proteger.
- Limpe, depois copie o resultado ou baixe-o.
Este limpador não reescreve, parafraseia nem humaniza uma única palavra do seu texto.
Comparação das predefinições Padrão, Avançado e Rigoroso
Padrão remove os caracteres que causam problemas na escrita normal, Avançado amplia a rede e Rigoroso remove o máximo.
| Grupo de caracteres | Padrão | Avançado | Rigoroso |
|---|---|---|---|
| Espaço de largura zero, unificador de palavras, marca de ordem de bytes | Removido | Removido | Removido |
| Controles bidirecionais e controles C0/C1 | Removido | Removido | Removido |
| Bloco Tags e caracteres de uso privado | Removido | Removido | Removido |
| Hífen suave U+00AD | Removido | Removido | Removido |
| Espaços incomuns da categoria Zs | Convertido para U+0020 | Convertido para U+0020 | Convertido para U+0020 |
| Unificadores U+200C e U+200D | Mantido | Removido fora de sequências de emoji | Removido em todos os lugares |
| Seletores de variação | Mantido | Removido fora de sequências de emoji | Removido em todos os lugares |
| Aspas tipográficas e travessões longos | Mantido | Mantido | Convertido para aspas retas e um traço simples |
Três filtros de um toque ficam ao lado das predefinições: excluir invisíveis, remover travessões e hífens, e remover emojis. Publicar essas regras é deliberado. Toda ferramenta concorrente esconde seu conjunto de regras atrás de um único botão, então você não sabe o que saiu do seu texto até algo quebrar.
Como a proteção de código Markdown mantém blocos de código intactos?
Com o modo Markdown e a proteção ligados, o limpador ignora código delimitado e inline, para que um trecho que precisa de um caractere exato o mantenha.
Código é o único lugar em que um caractere que você chamaria de lixo na prosa é estrutural. Uma expressão regular ou uma string de teste pode depender de uma marca de ordem de bytes exatamente onde está.
Seu texto sai do seu dispositivo?
Não. A varredura e a limpeza rodam no seu navegador, e a página nunca envia nem armazena seu texto.
A segunda metade honesta cabe no mesmo fôlego. Esta página é gratuita, então ainda pode mostrar anúncios e usar análises do site. O relatório JSON opcional registra o que mudou. Não carrega nada do seu texto.
Limites de texto e arquivo: 20.000 palavras e 1 MB
O limpador aceita até 20.000 palavras de texto colado, ou um arquivo UTF-8 de até 1 MB nos formatos .txt ou .md.
Todo o resto está fora do escopo: não HTML, DOCX, PDF, JSON nem CSV, e a cola chega só como texto simples. JavaScript é obrigatório. Não há conta nem pagamento. A interface vem em 26 idiomas. Os nomes oficiais Unicode permanecem em inglês em todos, porque um nome de caractere traduzido deixa de ser um nome que se possa citar.
Para fotos em vez de texto, você pode remover info de IA da imagem ou editar metadados da imagem.
Marcação de texto de IA por fornecedor: comparação de ChatGPT, Claude, Gemini e Grok
Só alguns fornecedores de IA marcam a saída de texto, e todos os que o fazem usam escolha de palavras em vez de caracteres ocultos.
| Fornecedor | Marca o texto | Método | Encontrado por este limpador | Fonte e data |
|---|---|---|---|---|
| Anthropic, Claude | Sim | Marca d'água de seleção de tokens, uma versão do SynthID Text | Não | Anthropic, anúncio de 11 de agosto de 2026, nota técnica de 14 de agosto de 2026, atualizado em 1 de setembro de 2026 |
| Google, Gemini | Sim | SynthID Text, modulação de probabilidade de tokens | Não | Google DeepMind, 14 de maio de 2024, open source mais tarde naquele ano |
| OpenAI, ChatGPT | Nenhuma marca d'água de texto confirmada | Nenhum em produção para texto. Imagens carregam C2PA e SynthID, áudio carrega SynthID | Não aplicável | Artigo de ajuda de proveniência da OpenAI, atual em 2 de setembro de 2026 |
| xAI, Grok | Nenhum compromisso publicado | Nenhum declarado | Não aplicável | A xAI não assinou o Código de práticas de transparência da Comissão, relatado em 12 de agosto de 2026 |
A Anthropic diz que modelos lançados em ou após 2 de agosto de 2026 carregam a marca no lançamento. Está trabalhando para adicionar marcação a modelos lançados antes dessa data. A detecção de marcas d'água de texto não é um verificador público. A Anthropic afirma que a detecção "is currently in private preview, available to eligible organizations as required under EU law". A lista de elegíveis inclui reguladores, aplicação da lei, mídia, checadores de fatos, pesquisadores, órgãos educacionais e grupos da sociedade civil da UE. O Claude Content Checker gratuito que a Anthropic também oferece lê C2PA Content Credentials em arquivos gerados, o que é diferente de uma marca d'água de texto.
A xAI não assinar o Código de práticas não isenta o Grok da própria AI Act. Um código voluntário é um caminho para conformidade, não um substituto da lei.
Como funciona a marca d'água de texto do Claude?
O Claude escolhe entre palavras igualmente boas, e uma chave secreta decide qual toma. A marca é a sequência de escolhas, não qualquer caractere no texto.
A Anthropic descreve o mecanismo com clareza. "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." A empresa também afirma que a marca d'água de texto do Claude "is a version of the SynthID-Text approach published by Google DeepMind in a Nature paper in 2024".
Sobre robustez a Anthropic é específica. "Light editing probably won't remove the watermark completely", e uma reescrita completa em que cada palavra é substituída remove a marca.
O que o SynthID Text marca na saída do Gemini?
O SynthID Text incorpora seu padrão nas probabilidades de tokens enquanto o Gemini escreve. A Google DeepMind anunciou a marca d'água de texto SynthID para o app Gemini e a experiência web em 14 de maio de 2024. O método funciona "by introducing additional information in the token distribution at the point of generation by modulating the likelihood of tokens being generated". A DeepMind tornou o método open source mais tarde naquele ano por meio do Responsible Generative AI Toolkit.
As limitações publicadas importam tanto quanto o método. O SynthID Text funciona melhor em respostas mais longas e variadas. Tem desempenho fraco em respostas factuais curtas, em que o modelo quase não tem liberdade de redação. A confiança cai de novo quando o texto é reescrito a fundo ou traduzido.
Detecções de caracteres ocultos e autoria por IA: por que uma nunca prova a outra?
Um caractere oculto é evidência de que algo processou seu texto, não evidência de que uma IA o escreveu.
Todo caractere invisível tem uma explicação comum que existia antes da escrita por IA. Processadores de texto, sistemas de gerenciamento de conteúdo e exportadores de PDF os inserem há décadas. Uma detecção diz que o texto passou por software, o que é verdade de quase toda frase que alguém publica.
De onde vêm os caracteres invisíveis além da IA?
Processadores de texto, editores web, exportações PDF, ferramentas de tradução, apps de chat e o simples copiar e colar inserem caracteres invisíveis por conta própria.
| Fonte | Caracteres que costuma adicionar | Por quê |
|---|---|---|
| Processadores de texto | U+00A0, U+2019, U+2014, U+00AD | Autocorreção e hifenização automática |
| Editores web e CMS | U+200B, U+FEFF | Dicas de quebra de linha e marcadores de codificação de arquivo |
| Exportações PDF | U+2009, U+202F, U+00A0 | Preservar o espaçamento tipográfico quando o texto é copiado de volta |
| Ferramentas de tradução e localização | U+200C, U+200D, U+061C | Renderização correta de escritas árabe, persa e índicas |
| Apps de chat e mensagens | U+200D, U+FE0F | Sequências de emoji e apresentação de texto ou emoji |
| Copiar e colar entre apps | U+FEFF, espaços Zs misturados | Conversão de codificação na área de transferência |
Minha própria frase de teste de 40 bytes acumulou quatro detecções sem nunca encontrar um modelo de linguagem. Esse é o argumento inteiro em uma medição.
Por que travessões em não são uma marca d'água
Um travessão em é um sinal de pontuação normal que escritores, editores e autocorreção usam há séculos, então não carrega nenhum sinal sobre quem escreveu uma frase.
A correção de 2025 encerra a questão. A OpenAI disse em 14 de novembro de 2025 que o ChatGPT finalmente obedeceria a uma instrução personalizada para parar de usar travessões em. Sam Altman disse claramente no dia: "If you tell ChatGPT not to use em-dashes in your custom instructions, it finally does what it's supposed to do". Um hábito que um usuário pode desligar em uma configuração de personalização nunca foi uma marca. Foi um padrão de estilo aprendido no treinamento, e a correção foi uma preferência.
Este limpador ainda oferece remoção de travessões, e o motivo é honesto. É um filtro de estilo para quem quer aspas retas e traços simples no texto. Não é um filtro de marca d'água e não mudará o que qualquer detector diga sobre seu texto.
Quando a limpeza quebra o texto: persa, árabe, escritas índicas e emoji
Remover caracteres de largura zero pode quebrar texto correto, porque algumas escritas precisam deles para soletrar palavras direito.
Eu rodei os quatro casos que mais quebram e registrei exatamente o que aconteceu. A palavra persa میخواهم tem oito caracteres, e o U+200C no meio impede que as duas partes se unam. Apague-o e você obtém میخواهم, sete caracteres e uma forma escrita diferente. Em devanágari, क्ष carrega um U+200D que forma a conjunção correta, e removê-lo muda a forma na tela. O emoji de família 👨👩👧👦 tem sete pontos de código, quatro figuras unidas por três unificadores U+200D. Remova os unificadores e ele se desfaz em 👨👩👧👦, quatro pessoas separadas. Um coração vermelho ❤️ carrega U+FE0F para renderizar como emoji, e sem ele o mesmo ponto de código volta a um símbolo de texto, ❤.
É por isso que a ferramenta mostra as detecções antes de limpar qualquer coisa, por que detecções individuais podem ser mantidas e por que Rigoroso não é o padrão. Um editor trabalhando em um idioma vê um resultado limpo. Um editor trabalhando em seis vê um relatório de bug.
Veredito final sobre a limpeza de marcas d'água de texto de IA
Limpar caracteres invisíveis vale a pena para texto limpo, portátil e seguro.
Dois motivos justificam usar esta ferramenta. O primeiro é que caracteres ocultos quebram coisas, em silêncio, em resultados de busca, pesquisas em planilha, código e URLs. O segundo é que caracteres de tag podem carregar instruções para um assistente de IA que ninguém digitou e ninguém consegue ver. Isso torna a limpeza um hábito de segurança e não um gesto cosmético.
Quem espera derrotar uma marca d'água de fornecedor está limpando a camada errada. Claude e Gemini marcam o texto nas escolhas de palavras, a OpenAI marca imagens e áudio mas não texto, e nenhuma quantidade de remoção de caracteres alcança nenhum deles. Uma forma de enfraquecer essas marcas d'água estatísticas é traduzir o texto para alguns idiomas diferentes e depois traduzi-lo de volta ao original.
Cole uma página do seu próprio texto na caixa de entrada acima e leia as detecções para entender melhor o texto, ou simplesmente copie a saída.
É isso por enquanto. Obrigado por ler até aqui.