Também disponível em: English · Español · Français · العربية
Detector de caracteres invisíveis: ache os ocultos
Todos os caracteres invisíveis, ignoráveis e disfarçados do seu texto, com nome, contagem e posição.
O que é um caractere invisível?
Um caractere invisível é um ponto de código que não ocupa espaço visível mas está realmente no texto. Alguns são úteis: um juntador de largura zero é o que transforma dois emojis em um, e um hífen suave marca onde uma palavra pode quebrar. Outros são estruturais, como os controles bidirecionais que deixam o árabe e o português dividirem uma linha. E outros estão ali porque alguém os pôs.
Eles dão problema porque o software os enxerga e você não. Uma busca que deveria casar não casa. Duas cadeias idênticas na tela comparam como diferentes. Uma chave de API copiada ganha um caractere no meio e para de funcionar, sem nada na tela que explique.
Esta página encontra esses caracteres, nomeia cada um com o nome oficial do Unicode e o ponto de código, e diz em que parte do texto ele está. O exemplo carregado acima se lê como vinte caracteres visíveis e na verdade tem quarenta e nove pontos de código.
Como usar
- Cole o texto. Qualquer coisa: uma mensagem, um nome de arquivo, uma célula de planilha, um commit que o grep não acha. É conferido no seu navegador e nunca enviado.
- Leia a tabela. Cada linha é um caractere, com o ponto de código, o nome Unicode, que tipo de coisa é, quantas vezes aparece e onde.
- E remova, se quiser. Um botão tira todos os caracteres ocultos, transformando os espaços estranhos em espaços comuns em vez de apagá-los, para que palavras que pareciam separadas continuem separadas.
Por que isto acha mais que um limpador
Quase toda ferramenta que remove caracteres invisíveis carrega uma lista escrita à mão com os poucos que o autor encontrou. Isso vale também para o limpador de texto deste site: a lista dele cobre treze pontos de código, e é justamente por isso que esta página existe.
O Unicode publica a resposta de verdade numa propriedade chamada Default_Ignorable_Code_Point, que marca os caracteres para os quais um renderizador não deve desenhar nada. Ela cobre 4.174 pontos de código, e 405 deles são caracteres atribuídos com nome. Ou seja, uma lista de treze deixa de fora 392 caracteres nomeados que são invisíveis por definição: os 260 seletores de variação, o bloco de tags inteiro com seus 97 caracteres, o juntador de grafemas, a marca de letra árabe, os preenchedores do hangul.
Nem tudo que vale sinalizar é ignorável, então a tabela diz em qual autoridade cada linha se apoia. Um espaço inquebrável aparece perfeitamente como espaço, mas não é o espaço em que um analisador quebra, e um caractere de controle no meio de uma linha é invisível sem que o Unicode o chame de ignorável. Ambos são reportados, e de ambos se diz o que são.
O bloco de tags e o texto que você não vê
Noventa e sete caracteres entre U+E0001 e U+E007F espelham o ASCII exatamente. O A maiúsculo de tag é o A mais um deslocamento fixo, o espaço de tag é um espaço, e nenhum deles é desenhado. Eles têm um trabalho legítimo dentro das sequências de bandeiras emoji, que é como as bandeiras da Inglaterra, da Escócia e do País de Gales são codificadas.
Também são o jeito de uma frase viajar dentro de um texto que parece completamente comum. Cole aqui algo que os contenha e aparece acima a linha decodificada, soletrando o que estava escondido. O exemplo carregado nesta página é exatamente isso: vinte caracteres visíveis carregando uma instrução que ninguém vê.
Isso deixou de ser curiosidade e virou coisa que vale conferir, porque hoje texto é colado o tempo todo em sistemas que leem todos os caracteres e não só os que uma pessoa vê. Seja o texto oculto uma marca d'água, um rastreador ou uma instrução, o primeiro passo honesto é conseguir olhar para ele.
O que esta página não consegue dizer
Ela não diz por que um caractere está ali. Um juntador de largura zero no meio de um emoji está fazendo o trabalho dele; o mesmo caractere entre duas letras não. A ferramenta reporta o que está presente e deixa o julgamento com você, porque o mesmo ponto de código é legítimo num contexto e suspeito em outro.
Ela também trabalha com pontos de código, não com o que você chamaria de letras. É a unidade certa aqui — todo caractere de tag e todo seletor de variação moderno fica acima do plano multilíngue básico, então um detector que percorresse o texto do jeito ingênuo partiria cada um ao meio e não acharia nenhum — mas significa que um emoji de bandeira ou com tom de pele conta como vários pontos de código e não como um símbolo.
Por fim, um resultado limpo quer dizer que não há nada oculto que o Unicode nomeie. Um texto ainda pode enganar de formas que esta página não cobre, principalmente usando letras de outro alfabeto idênticas às latinas. Esse é outro problema, e outra página.
Por que é grátis?
A lista de caracteres são alguns kilobytes que viajam com a página, e a varredura roda no seu navegador. Nada do que você cola é enviado, nada é registrado e não há conta a criar.
Sem cadastro, sem limites e sem marca d'água em nada que você copiar.