Contador de caracteres e palavras

O contador de caracteres mostra, enquanto você digita ou cola, quantos caracteres o texto tem, com e sem espaços, além de palavras, linhas, parágrafos e o tempo de leitura. Emojis e letras acentuadas contam como um caractere cada, como você vê na tela. Para quem programa, ele também mostra os bytes em UTF-8 e o valor de length no JavaScript.

Atualizado em · Por Leonardo Gaertner

Caracteres
0
Sem espaços
0
Palavras
0
Linhas
0
Parágrafos
0
Tempo de leitura
0

Bytes em UTF-8: 0 · length no JavaScript: 0

Achou um resultado errado ou tem uma sugestão? Avise por e-mail.

Como usar

  1. Digite ou cole o texto na caixa.
  2. Acompanhe os números, que atualizam a cada tecla.
  3. Para limites de banco de dados ou de API, confira também os bytes em UTF-8 e o length do JavaScript, logo abaixo.

Como funciona

Cada caractere é contado como uma pessoa contaria: a letra á, o emoji 👍🏽 e a bandeira 🇧🇷 valem 1 cada, mesmo sendo formados por mais de um código por dentro. A contagem segue a segmentação de texto do Unicode, a mesma usada pelos navegadores para mover o cursor.

Palavra é todo trecho entre espaços que tem ao menos uma letra ou um número, como no Word e no Google Docs: guarda-chuva conta como uma palavra, e um travessão solto não conta. Parágrafos são os blocos separados por uma linha em branco. O tempo de leitura considera 200 palavras por minuto.

Os bytes em UTF-8 mostram quanto espaço o texto ocupa ao ser salvo ou enviado: letras sem acento ocupam 1 byte, letras acentuadas 2 e emojis 4 ou mais. Já o length do JavaScript conta unidades UTF-16, e por isso um emoji costuma valer 2 ali.

Exemplo

Texto: Ação 👍🏽

Caracteres: 6 (a, ç, ã, o, espaço e o emoji)

Bytes em UTF-8: 15

length no JavaScript: 9

Fonte: Unicode UAX #29: segmentação de texto (o que conta como um caractere)

Em código

Em código, cada função de tamanho conta uma coisa diferente: bytes, unidades internas ou caracteres visíveis. Use bytes para limites de banco e de API, e caracteres visíveis para o que o usuário vê.

JavaScript
// Caracteres como aparecem na tela: emoji e letra acentuada valem 1.
function contarCaracteres(texto) {
  const segmentos = new Intl.Segmenter('pt-BR', { granularity: 'grapheme' }).segment(texto);
  return [...segmentos].length;
}

// Bytes em UTF-8: o que conta em limites de banco de dados e de API.
function contarBytes(texto) {
  return new TextEncoder().encode(texto).length;
}

// Palavras: trechos entre espaços com ao menos uma letra ou um número.
function contarPalavras(texto) {
  return texto.split(/\s+/).filter((p) => /[\p{L}\p{N}]/u.test(p)).length;
}

const texto = 'Ação 👍🏽';
console.log(texto.length); // 9: unidades UTF-16, o emoji com tom de pele vale 4
console.log(contarCaracteres(texto)); // 6
console.log(contarBytes(texto)); // 15
Python
def contar_bytes(texto: str) -> int:
    """Bytes em UTF-8: o que conta em limites de banco de dados e de API."""
    return len(texto.encode("utf-8"))


def contar_palavras(texto: str) -> int:
    """Palavras: trechos entre espaços com ao menos uma letra ou um número."""
    return sum(1 for p in texto.split() if any(c.isalnum() for c in p))


texto = "Ação 👍🏽"
# len conta pontos de código: o emoji com tom de pele vale 2. Para contar como a tela
# mostra, use o padrão \X do pacote regex: len(regex.findall(r"\X", texto)) dá 6.
print(len(texto))  # 7
print(contar_bytes(texto))  # 15
print(contar_palavras(texto))  # 1: o emoji sozinho não é palavra
PHP
<?php
$texto = 'Ação 👍🏽';

echo strlen($texto), PHP_EOL;          // 15: bytes em UTF-8
echo mb_strlen($texto), PHP_EOL;       // 7: pontos de código (o emoji com tom de pele vale 2)
echo grapheme_strlen($texto), PHP_EOL; // 6: como aparece na tela (extensão intl)

// Palavras: trechos entre espaços com ao menos uma letra ou um número.
function contarPalavras(string $texto): int
{
    $partes = preg_split('/\s+/u', $texto, -1, PREG_SPLIT_NO_EMPTY);
    return count(preg_grep('/[\p{L}\p{N}]/u', $partes));
}

echo contarPalavras($texto), PHP_EOL; // 1: o emoji sozinho não é palavra

Perguntas frequentes

Os espaços contam como caracteres?

Sim, na contagem principal. Por isso a ferramenta mostra também o total sem espaços, que não conta espaços, tabulações nem quebras de linha. Confira qual dos dois o seu formulário ou a sua plataforma usa.

Por que o meu código diz que o texto é maior?

Porque muitas linguagens contam unidades internas, e não caracteres. O length do JavaScript conta unidades UTF-16, e um emoji vale 2. Em bancos de dados e APIs, o limite pode ser em bytes, e em UTF-8 uma letra acentuada ocupa 2 bytes. Os dois números aparecem abaixo da contagem.

Quantos caracteres cabem no título e na descrição para o Google?

Não há um número fixo, porque o Google corta pela largura em pixels. Como referência, títulos de até 60 caracteres e descrições de até 155 a 160 costumam aparecer inteiros.

O texto que eu colo fica salvo em algum lugar?

Não. A contagem é feita no seu navegador, e o texto não é enviado a nenhum servidor nem fica guardado depois que você fecha a página.