Ferramentas de texto online
As ferramentas de texto reúnem as transformações que aparecem todo dia: mudar caixa, remover acentuação, gerar slug, limpar espaço duplicado, contar caracteres e palavras e ver o tamanho em bytes.
Contagem de caractere e de byte
São números diferentes e a diferença importa. Em UTF-8, uma letra sem acento ocupa um byte, uma letra acentuada ocupa dois, e um emoji pode ocupar quatro. Se você está preenchendo um campo com limite em bytes, como coluna varchar de banco ou legenda de rede social, é o número de bytes que decide se cabe.
Tem ainda uma terceira contagem: a de unidades de código. JavaScript mede string em UTF-16, então um emoji conta como dois no length. É por isso que cortar string com slice às vezes parte um emoji ao meio e produz caractere quebrado.
Slug e normalização
A geração de slug remove acento, troca espaço por hífen e derruba o que não for seguro em URL. O passo de remover acento usa a normalização Unicode na forma NFD, que separa a letra do sinal diacrítico, e depois descarta os sinais. É o que String.normalize faz em JavaScript.
Isso explica um bug clássico: dois textos que parecem idênticos na tela podem ter bytes diferentes, porque um usa é como caractere único e o outro usa e mais acento combinante. Comparação de string falha, busca não acha, e a normalização é o que resolve.
Vale rodar o slug sobre o título real antes de publicar, para conferir o resultado em vez de descobrir depois que a URL ficou estranha.
Limpeza de texto colado
Texto vindo de PDF, Word ou navegador traz caracteres invisíveis que estragam comparação e busca: espaço não separável, marca de ordenação de bytes no começo do arquivo, hífen de largura zero. A limpeza remove esses casos, que é justamente o que faz um diff parar de acusar diferença em linhas visualmente iguais.
Nada do que você cola aqui sai do seu navegador. O processamento é todo local, em JavaScript, sem envio para servidor, sem log e sem armazenamento.
Perguntas frequentes
Qual a diferença entre contagem de caracteres e de bytes?
Caractere é o que você vê, byte é o que ocupa em memória ou banco. Em UTF-8, letra sem acento usa um byte, letra acentuada usa dois e emoji pode usar quatro. Campos com limite costumam contar bytes.
A remoção de acento preserva o significado?
Preserva a leitura, não a grafia correta. Ela existe para gerar slug, chave de busca e identificador, não para reescrever texto que será publicado.
O texto colado fica salvo?
Não. Tudo acontece no navegador, sem envio e sem armazenamento. Ao fechar a aba, o conteúdo desaparece.
Por que dois textos iguais na tela não são iguais no código?
Porque um pode usar a letra acentuada como caractere único e o outro como letra mais acento combinante. São bytes diferentes com a mesma aparência. Normalizar para NFC antes de comparar resolve.
Referências
- Unicode Standard Annex 15 (Normalization Forms)O que são NFC, NFD, NFKC e NFKD, e quando cada uma é a escolha certa.
- MDN: String.prototype.normalize()Como aplicar a normalização em JavaScript, que é a base da remoção de acento.
- Unicode: FAQ sobre UTF-8 e BOMQuantos bytes cada caractere ocupa e o que é a marca de ordenação de bytes.