# 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.

- Endereço oficial: https://pradev.com.br/contador-de-caracteres
- Categoria: Texto
- Tipo: Utilitário
- Atualizado em: 2026-10-01
- Autor: Leonardo Gaertner (https://pradev.com.br/sobre)
- Preço: grátis, sem cadastro. O processamento acontece no navegador de quem usa.

## 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

```text
Texto: Ação 👍🏽
Caracteres: 6 (a, ç, ã, o, espaço e o emoji)
Bytes em UTF-8: 15
length no JavaScript: 9
```

## 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
```

_JavaScript_

```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
```

_Python_

```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
```

_PHP_

## 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.

## Fontes

- [Unicode UAX #29: segmentação de texto (o que conta como um caractere)](https://www.unicode.org/reports/tr29/)

## Guias

- [Caracteres invisíveis: por que o texto colado quebra o código](https://pradev.com.br/guias/caracteres-invisiveis-no-texto-colado): Espaço de largura zero, BOM e espaço não separável fazem textos iguais serem diferentes. Veja como encontrar e remover esses caracteres, com código.

## Ferramentas relacionadas

- [Conversor de Maiúsculas e Minúsculas](https://pradev.com.br/conversor-de-maiusculas-e-minusculas): Converta texto para MAIÚSCULAS, minúsculas, Título ou Frase, e nomes para camelCase, snake_case e kebab-case. Grátis e no navegador.
- [Remover Espaços](https://pradev.com.br/remover-espacos): Remova espaços duplos, espaços no começo e no fim das linhas, espaços invisíveis e linhas em branco. Grátis, no navegador.
- [Remover Quebra de Linha](https://pradev.com.br/remover-quebra-de-linha): Junte as linhas de um texto copiado de PDF ou e-mail, trocando as quebras por espaço, por nada ou por vírgula. Opção de manter os parágrafos.
- [Remover Acentos do Texto](https://pradev.com.br/remover-acentos-do-texto): Tire acentos e cedilha de qualquer texto: ação vira acao, pão vira pao. Opção de manter o ç. Grátis, rápido e sem enviar o texto.
- [Colocar em Ordem Alfabética](https://pradev.com.br/colocar-em-ordem-alfabetica): Coloque listas em ordem alfabética, de A a Z ou de Z a A, com acentos no lugar certo e números em ordem numérica. Por linha ou vírgula.
- [Contador de Ocorrência de Palavra](https://pradev.com.br/contador-de-ocorrencia-de-palavra): Veja quantas vezes cada palavra aparece em um texto, da mais usada para a menos usada, ou conte uma palavra específica. Grátis.
