Pular para o conteúdo

Ferramentas de texto que nunca guardam o seu texto

Onze ferramentas para contar, comparar, limpar e ler texto. Rascunhos, listas e código-fonte nunca ficam armazenados.

11 ferramentas, sem cadastro, sem marca d'água

O Contador de palavras e o Contador de caracteres respondem “qual é o tamanho disto”, o Comparar textos responde “o que mudou”, e o Remover linhas duplicadas organiza uma lista. Os visualizadores servem para arquivos que alguém mandou e que não abrem direito, e os três minificadores são para código a caminho da produção. As notas abaixo da lista explicam por que duas ferramentas podem contar o mesmo texto de forma diferente, e por que duas linhas que parecem idênticas às vezes não são a mesma linha.

Contagem e comparação

3 ferramentas

Conte palavras e caracteres corretamente em qualquer idioma e veja exatamente o que mudou entre duas versões.

Visualizadores

3 ferramentas

Leia um CSV, um arquivo XML ou um documento Markdown do jeito certo, sem uma planilha bagunçar tudo antes.

O que o texto realmente é, e por que as ferramentas discordam sobre ele

Um arquivo de texto é feito de bytes mais uma codificação, e a codificação não fica guardada no arquivo. Só uma convenção diz a um programa que determinado byte significa “é” — e é por isso que o mesmo arquivo abre certo num lugar e aparece como “é” em outro. O UTF-8 é a resposta moderna e guarda as letras latinas comuns em um byte, as letras acentuadas em dois, e a maior parte do chinês, do japonês, do árabe e todos os emojis em três ou quatro. O UTF-16 é o que o Windows e o JavaScript usam internamente e guarda quase tudo em dois bytes e o resto em quatro. Windows-1252 e Latin-1 são as codificações de um byte que sistemas mais antigos ainda geram, e são a origem mais comum de caracteres embaralhados. Vale saber sobre estas páginas: o Visualizador de CSV detecta a codificação do arquivo que você solta, inclusive UTF-16 e Windows-1252, e deixa você trocá-la. As caixas de texto simples não fazem isso — um arquivo solto é lido como UTF-8, então uma exportação em Latin-1 vai mostrar as letras acentuadas erradas, e a solução é convertê-la antes.

“Caractere” tem quatro significados, e o que você precisa depende de quem está impondo o limite. O que uma pessoa vê como um caractere é um cluster de grafemas. O que uma expressão regular encontra é um code point. O que o string.length do JavaScript informa são unidades UTF-16. O que uma coluna de banco de dados ou um cabeçalho HTTP mede são bytes UTF-8. Para um texto simples em inglês, os quatro coincidem, e é por isso que ninguém percebe — até que um emoji de família é um grafema, sete code points, onze unidades UTF-16 e vinte e cinco bytes, e uma mensagem de 200 caracteres é rejeitada por um campo de 255. O Contador de caracteres mostra os quatro exatamente por esse motivo.

Caracteres invisíveis são caracteres de verdade. Um espaço não separável parece idêntico a um espaço e é um caractere totalmente diferente — ele aparece o tempo todo em textos copiados de uma página da web ou de um editor de texto, e quebra buscas, a leitura de CSV e códigos que dividem por espaços. Os zero-width joiners são o que mantém unido um emoji de várias pessoas. Hifens condicionais, marcas de direção e marcas de ordem de bytes viajam junto com o texto colado. Nenhum deles aparece na tela, então o único sinal que você tem é uma contagem que não bate com o que você vê — um uso honesto para um contador de caracteres. Observe que a opção de ignorar espaços do Comparar textos junta espaços e tabulações comuns; ela não trata um espaço não separável como espaço, porque os dois não são a mesma coisa.

As quebras de linha são o motivo pelo qual um diff às vezes mostra todas as linhas como alteradas. O Windows termina uma linha com retorno de carro e avanço de linha; todo o resto usa só o avanço de linha. Salve um arquivo LF num editor do Windows e cada linha passa a diferir por um byte invisível, então uma comparação byte a byte — git diff, diff(1) — informa o arquivo inteiro como reescrito e esconde a única mudança que você realmente fez. O nosso Comparar textos e o Remover linhas duplicadas separam as linhas pelas três convenções antes de comparar, então um arquivo que só mudou as quebras de linha não aparece aqui como uma parede vermelha. Isso é uma conveniência numa ferramenta de leitura e uma armadilha num repositório: corrija na origem, com o seu editor ou com as configurações de quebra de linha do próprio git.

Duas strings que parecem idênticas podem ser comparadas como diferentes, e a normalização costuma ser o motivo. O Unicode permite escrever “é” de duas formas: como um code point só, ou como um “e” simples seguido de um acento agudo combinante. Elas aparecem iguais na tela e são sequências de bytes diferentes, então uma comparação, uma remoção de duplicatas ou uma consulta ao banco de dados as trata como dois valores distintos. O macOS e o Windows historicamente discordam sobre qual forma usar em nomes de arquivos, e é assim que uma lista reunida de duas máquinas acaba com o que parecem duplicatas exatas que não são removidas. O Contador de caracteres é como você descobre isso — as duas formas têm a mesma contagem de grafemas e uma contagem de code points diferente. Nenhuma destas ferramentas converte entre as formas; isso é trabalho de uma linha para um script com uma biblioteca Unicode, como o unicodedata.normalize do Python.

“Contagem de palavras” é um critério, não uma medição. Dividir por espaços em branco é uma regra do inglês, e aplicá-la ao chinês, ao japonês ou ao tailandês — que não põem espaços entre as palavras — conta um artigo longo como uma palavra só. O nosso contador usa a segmentação de palavras Unicode do navegador, que sabe onde as palavras começam em qualquer escrita. As divergências que sobram são sobre hifens (“bem-vindo” é uma palavra aqui e no Word, duas em algumas ferramentas), números soltos e o que conta como frase — “Encontramos o Dr. Silva” é uma frase, e um divisor ingênuo diz que são duas. O tempo de leitura é mais uma estimativa por cima disso: 238 palavras por minuto na leitura silenciosa, tirado de uma meta-análise, e não do número redondo que passa de um blog para outro.

Quando o navegador é mesmo a ferramenta errada

Nada neste módulo é enviado ou armazenado, e é isso que torna seguro colar aqui um rascunho inédito ou um código-fonte proprietário. Isso também define o teto, e preferimos dizer onde ele fica do que deixar você descobrir no meio do trabalho.

Arquivos grandes. O texto inteiro fica na memória da aba e é reexaminado enquanto você digita. Alguns megabytes vão bem; um log de centenas de megabytes não, e um celular desiste antes de um notebook. A linha de comando não tem esse problema porque processa em streaming: grep e ripgrep buscam em arquivos maiores que a sua memória, sed e awk transformam linha por linha, e o sort com a opção unique remove duplicatas de uma lista de dezenas de milhões de linhas usando o disco. Todos são gratuitos e já vêm instalados no macOS e no Linux.

Documentos muito diferentes. O Comparar textos para em 8.000 diferenças, porque a partir daí o custo de memória do algoritmo cresce rápido o bastante para travar a aba, e um diff desse tamanho é ilegível de qualquer jeito. Duas versões do mesmo documento quase nunca chegam lá; dois documentos sem relação chegam na hora. Para revisar código, diff e git diff lidam com qualquer tamanho, e uma ferramenta de merge de três vias de verdade faz algo que esta página simplesmente não faz.

Mudar a codificação ou normalizar Unicode. Estas páginas leem e informam; não convertem entre codificações. O iconv converte entre todas as codificações que existem, o comando file tenta adivinhar qual você tem, e a normalização Unicode é uma linha de Python ou uma chamada ao uconv da ICU. Se você está consertando uma exportação com caracteres embaralhados, esse é o conjunto de ferramentas.

Qualquer coisa repetitiva. Estas ferramentas funcionam quando uma pessoa clica. Contar palavras em quatrocentos documentos, ou minificar uma pasta a cada commit, é trabalho para um script ou uma etapa de build — e, no caso da minificação, a sua ferramenta de build faz a mesma minificação, com source maps, modo watch e cache que uma caixa de colar não oferece. Esta página é para o arquivo que está na sua frente.

CSS moderno. O Minificar CSS recusa o aninhamento nativo e a sintaxe moderna de intervalos em media queries em vez de minificá-los, porque o minificador por trás dele é anterior a ambos e apaga silenciosamente o que não entende. É uma recusa honesta, não um recurso, e a solução é compilar o aninhamento antes com Sass, PostCSS ou Lightning CSS — o que a sua ferramenta de build quase certamente já faz.

Como escolher entre ferramentas parecidas

Contador de palavras vs. Contador de caracteres. A mesma contagem, com números de destaque diferentes. O Contador de palavras destaca palavras, frases, parágrafos e tempo de leitura, que é como se mede uma redação, um artigo ou um discurso. O Contador de caracteres destaca caracteres, caracteres sem espaços e bytes UTF-8, que é como se mede uma meta description, um segmento de SMS ou um campo de banco de dados. Se algo recusou o seu texto por ser longo demais, você quer o de caracteres, e especificamente a contagem de bytes.

Comparar textos vs. Remover linhas duplicadas. O comparador responde “o que mudou entre estas duas versões” e precisa de dois textos. O removedor de duplicatas trabalha com uma lista e responde “o que aparece mais de uma vez aqui”, e também mostra quais itens se repetiram e quantas vezes, ordena de forma natural para que item2 venha antes de item10, ou mantém só as linhas que apareceram exatamente uma vez. Encontrar os itens que só existem em uma de duas listas é trabalho do removedor de duplicatas, não do comparador.

Minificar HTML vs. Minificar CSS vs. Minificar JavaScript. Três linguagens, três minificadores, e uma sobreposição que vale conhecer: o minificador de HTML também minifica o CSS dentro de blocos style e o JavaScript dentro de blocos script, do mesmo jeito que as outras duas páginas. Então um único arquivo HTML precisa de uma ferramenta, não de três. Arquivos .css e .js separados precisam das próprias páginas.

Visualizador de XML vs. Formatador XML e Validador XML. O visualizador daqui mostra uma árvore recolhível para explorar, que é o que você quer quando o documento é grande e você está procurando alguma coisa. O formatador e o validador, nas ferramentas para desenvolvedores, entregam texto indentado para colar de volta num arquivo e a linha e a coluna exatas de um erro. Ler, de um lado; editar e corrigir, do outro.

Visualizador de CSV vs. abrir o arquivo no Excel. Não é uma ferramenta rival, mas é a comparação que as pessoas realmente fazem. O Excel converte ao abrir e não pergunta: um código de produto 00123 vira 123, um número de peça 5-3 vira 5 de março, um número de pedido longo vira notação científica, e uma exportação separada por ponto e vírgula de um sistema alemão cai inteira na coluna A. O visualizador mostra cada valor como texto, exatamente como está guardado, para você ver o que realmente recebeu.

Visualizar Markdown vs. Markdown para PDF. A pré-visualização serve para conferir se um README vai aparecer como o GitHub vai exibi-lo, ao vivo enquanto você digita. Markdown para PDF, nas ferramentas de documentos, serve para gerar um documento final com quebras de página. Confira aqui, publique lá.

A base destas ferramentas

Os motores de código aberto que fazem o trabalho de fato e as especificações que eles implementam.

  • Unicode Annex #15Specification — explica a normalização — por que duas strings aparentemente idênticas podem ser diferentes.
  • Unicode Annex #29Specification — define os clusters de grafemas, que é o que “um caractere” realmente significa.
  • cssoMIT — minifica CSS.
  • TerserBSD-2-Clause — minifica JavaScript.
  • markdown-itMIT — renderiza a pré-visualização de Markdown.

Perguntas frequentes

O meu texto fica armazenado em algum lugar?

Não. Nada fica armazenado, nada é registrado e nenhuma requisição é feita. Desconecte-se da internet depois que a página carregar e tudo continua funcionando. Isso importa mais do que parece quando se trata de texto: o que as pessoas colam em contadores e comparadores online são textos inéditos, minutas jurídicas, trabalhos de estudantes e código-fonte proprietário.

Por que a minha contagem de palavras é diferente da do Microsoft Word ou de outro site?

Porque contar envolve escolhas. Palavras com hífen, números soltos, o que termina uma frase e o que separa um parágrafo são todas decisões, e cada ferramenta decide de um jeito. A nossa conta “bem-vindo” como uma palavra, considera uma linha em branco — e não cada quebra de linha — como limite de parágrafo, e não divide a frase depois de uma abreviação como “Dr.” — e usa a segmentação de palavras Unicode, então chinês e japonês são contados direito, em vez de aparecerem como uma palavra enorme. Para um texto corrido comum, os números ficam bem próximos; para uma lista de códigos de peças, não.

Por que um arquivo que eu soltei aparece com “é” em vez de “é”?

Porque ele não está em UTF-8. As caixas de texto leem um arquivo solto como UTF-8, que cobre quase tudo o que foi criado neste século, mas uma exportação mais antiga pode estar em Windows-1252 ou Latin-1, e esses bytes significam outra coisa. Converter uma vez com o iconv resolve de vez. O Visualizador de CSV é a exceção entre estas ferramentas — ele detecta a codificação e deixa você trocá-la se a detecção errar.

Por que ainda há duplicatas depois que eu removi as duplicatas?

Quase sempre por causa de espaços no fim da linha, que são invisíveis e tornam duas linhas realmente diferentes. Por isso, remover os espaços das pontas antes de comparar vem ativado por padrão, e isso só afeta a comparação — a linha que fica mantém o texto original. A outra causa é o Unicode: uma letra acentuada escrita como um caractere só e como uma letra mais um acento combinante parecem idênticas e não são iguais. Nada aqui normaliza isso para você.

Estas ferramentas funcionam com um documento do Word, um PDF ou uma planilha?

Não diretamente — estas ferramentas trabalham com texto, e é isso que as mantém instantâneas. Converta antes: as nossas ferramentas [PDF para texto](pdf-to-text) e [DOCX para TXT](docx-to-txt) fazem exatamente isso, e o resultado pode ser colado direto aqui. O CSV é a exceção e abre direto no Visualizador de CSV.

Existe limite de tamanho ou limite diário?

Não há conta, nem cota, nem limite diário, porque não há um servidor contando nada. O limite é a memória do seu dispositivo. O único limite explícito está no Comparar textos, que para em 8.000 diferenças e avisa, em vez de travar a aba — comparar duas versões do mesmo documento quase nunca chega perto disso.