Contador de Caracteres do X (Twitter)

Conte uma publicação como a plataforma: link vale 23, emoji vale 2, o resto é caractere comum. Tweet 280, bio 160 e nome 50.

A contagem roda localmente no seu navegador. Não há botão de envio e seu rascunho nunca sai da página.

0/280
—

280/160/50 são os limites padrão do plano gratuito. Contas premium têm limites maiores e o X ajusta os pesos dos grafemas de vez em quando: em casos-limite, confira no app oficial.

Como funciona

O contador reproduz a ponderação da plataforma em vez do comprimento ingênuo da string. Primeiro encontra cada token http:// ou https:// e cobra 23 fixos por um — o encurtador t.co torna o tamanho do link irrelevante. O texto restante é percorrido em agrupamentos de grafemas, e qualquer grupo que comece com um code point acima de U+FFFF custa 2 enquanto o resto custa 1.

A armadilha do UTF-16
O .length do JavaScript conta unidades de código de 16 bits, então um emoji de carinha sorridente reporta comprimento 2 e um emoji de família com cinco code points reporta bem mais. A contagem ingênua também parte os pares substitutos ao meio; esta ferramenta percorre grupos inteiros para que apará-la nunca corrompa um caractere.
A regra dos 23 do t.co
Ao publicar, todo link é reescrito pelo encurtador do serviço, então uma URL de 5 caracteres e um monólito de rastreamento de 300 custam exatamente 23. O contador remove os tokens de URL antes de pesar o texto e informa à parte quantos links detectou.
Contagem de grafemas com Intl.Segmenter
Onde o navegador suporta Intl.Segmenter, bandeiras, modificadores de tom de pele e famílias ZWJ são tratadas como um caractere visível, como você vê. Motores mais antigos usam iteração por code point com Array.from, que continua segura com substitutos e só fica um pouco mais rígida em emojis compostos.

Perguntas frequentes

Markdown ou formatação oculta mudam a contagem?

Não. O X guarda as publicações como texto simples, então marcadores de markdown e estilos invisíveis contam como os caracteres literais que você digitou. O único desvio do comprimento bruto são os links — normalizados para 23 — e os caracteres fora do Plano Multilíngue Básico, que valem 2.

Por que emoji conta como dois caracteres?

As strings do JavaScript são UTF-16, e a maioria dos emoji fica acima do Plano Multilíngue Básico, onde um caractere visível ocupa duas unidades de código de 16 bits — um par substituto. O X pesa esses code points em 2, e esta página imita isso percorrendo agrupamentos de grafemas com Intl.Segmenter (com alternativa por code point onde ele falta).

Funciona para threads ou posts longos?

Ele conta um bloco de texto contra um limite — é exatamente assim que as threads funcionam: cada publicação tem seu próprio orçamento, então confira uma por vez. Posts longos são um recurso premium à parte com limite bem maior; este contador não os modela.

280 é o limite certo para minha conta?

280 é o limite padrão do plano gratuito para tweets, 160 para a bio e 50 para o nome de exibição — os três estão no seletor. Contas Premium têm limites maiores e o X às vezes testa mais caracteres por grafema. Em casos-limite, verifique no app oficial antes de publicar.

Algo é enviado para um servidor?

Não. Contar são algumas linhas de JavaScript puro rodando no seu navegador: não há botão de envio, armazenamento nem requisição de rede associada ao seu texto. Os rascunhos ficam no seu dispositivo.