CodeKitHub
Ferramentas de texto

Contador de bytes — Contagem de caracteres vs. tamanho em bytes

Última atualização:

Digite ou cole um texto e veja, ao vivo, quantos caracteres ele contém em comparação a quantos bytes ele realmente ocupa em UTF-8 e UTF-16 — os dois números divergem assim que caracteres não ASCII (acentos, texto CJK, emoji) entram em cena.

0
Caracteres
0
Bytes UTF-8
0
Bytes UTF-16

O que é esta ferramenta?

Para texto ASCII simples (letras em inglês, dígitos, pontuação básica), a contagem de caracteres e a de bytes são o mesmo número — cada caractere ocupa exatamente um byte em UTF-8. Assim que o texto inclui letras acentuadas, caracteres chineses/japoneses/coreanos, cirílico, árabe, emoji, ou a maioria dos outros caracteres não ASCII, isso deixa de ser verdade: um único caractere pode ocupar 2, 3 ou 4 bytes em UTF-8, e 2 ou 4 bytes em UTF-16.

Isso importa sempre que um sistema tem um limite em bytes em vez de caracteres — mensagens SMS, tamanhos de coluna de banco de dados, limites de payload de API, e algumas plataformas sociais medem tudo em bytes, não caracteres, então o mesmo texto pode silenciosamente exceder um limite dependendo de qual idioma ou símbolos ele contém.

Por que usar?

  • Está desenvolvendo uma integração com a API do X (Twitter) e quer entender por que uma postagem em português com acentos está batendo num limite em bytes mesmo tendo poucos caracteres — comparar a contagem de caracteres com a de bytes UTF-8 mostra a diferença na hora.
  • Trabalha numa loja virtual multilíngue e precisa checar se o nome de um produto em português cabe numa coluna VARCHAR(255) do banco de dados quando esse limite é definido em bytes, não em caracteres.
  • Está implementando um sistema de notificação por SMS para clientes internacionais e quer estimar em quantos segmentos uma mensagem com emoji e acentuação será dividida antes de mandar de verdade.
  • Está investigando um erro de limite de payload numa API e percebeu que o texto em português parece curto, mas o número de bytes está estranhamente alto.
  • Tentou cadastrar um nome de usuário com emoji num sistema estrangeiro e recebeu um aviso de que sobrou menos espaço do que o esperado — dá pra ver quantos bytes e unidades de código o emoji realmente ocupa por trás dos panos.
  • Mesmo lidando com dados de clientes ou strings de um sistema interno da empresa, o texto é processado só no navegador, então dá pra conferir sem mandar nada para fora.

Como usar

  1. Digite ou cole texto na caixa.
  2. Leia a contagem de caracteres, contagem de bytes UTF-8, e contagem de bytes UTF-16 abaixo — elas atualizam enquanto você digita.

Exemplo

Entrada

Hello, 世界! 🌍

Resultado

12 caracteres, 19 bytes UTF-8, 26 bytes UTF-16

A parte ASCII ("Hello, " e "! ") ocupa 1 byte por caractere em UTF-8. Cada caractere chinês ocupa 3 bytes, e o emoji ocupa 4 bytes — por isso as contagens em bytes são visivelmente maiores que a contagem de caracteres.

Usos comuns

  • Verificar se uma descrição de produto multilíngue vai caber em uma coluna de banco de dados definida por comprimento em bytes em vez de contagem de caracteres.
  • Estimar o uso de segmentos SMS, já que SMS é cobrado e dividido por tamanho em bytes, e texto não latino usa um limite por segmento diferente.
  • Verificar se um payload de API ou campo de formulário fica abaixo de um limite de tamanho baseado em bytes antes de enviar.
  • Entender por que uma string que "parece curta" está sendo rejeitada por um sistema com verificação de comprimento baseada em bytes.

Quantos bytes cada tipo de caractere ocupa em UTF-8

Mesmo sendo "1 caractere" nos dois casos, o número de bytes usado em UTF-8 varia bastante dependendo do tipo de caractere. Veja a referência abaixo.

Tipo de caractereBytes em UTF-8Exemplo
Letras e números sem acento, pontuação básica1 byteA, 1, !, espaço
Letras acentuadas do português, cirílico, grego2 bytesá, ç, é, Ж
Caracteres CJK (chinês, japonês, coreano)3 bytes中, あ, 한
Emoji e alguns símbolos especiais4 bytes🌍, 🎉

Perguntas frequentes

Por que a contagem de caracteres e a de bytes não coincidem?

Texto Unicode é armazenado como bytes, e quantos bytes cada caractere precisa depende da codificação e do próprio caractere. Em UTF-8, caracteres ASCII ocupam 1 byte, a maioria das letras latinas acentuadas e cirílico/grego/hebraico/árabe ocupam 2 bytes, a maioria dos caracteres CJK ocupam 3 bytes, e emoji tipicamente ocupam 4 bytes. A contagem de caracteres simplesmente conta símbolos, ignorando como são armazenados.

Qual contagem de bytes devo usar para um campo limitado por bytes?

Use a codificação que o sistema realmente usa para armazenar ou transmitir o texto — a maioria das APIs web modernas, bancos de dados e arquivos usam UTF-8, então a contagem de bytes UTF-8 costuma ser a relevante. Alguns sistemas mais antigos (como o tratamento interno de strings do Windows/Java) usam UTF-16.

Isso conta emoji corretamente?

Sim. Muitos emoji são armazenados internamente como um par de unidades de código "substitutas" UTF-16, que métodos ingênuos de contagem contam como 2 caracteres. Esta ferramenta conta pontos de código Unicode corretamente, então um emoji é contado como 1 caractere, combinando com quantos caracteres uma pessoa realmente vê.

Isso é a mesma coisa que a ferramenta Contador de Palavras?

Não — o Contador de Palavras foca em contagem de palavras e frases para escrita. Esta ferramenta é especificamente sobre tamanho em bytes versus contagem de caracteres, que importa para limites técnicos em vez de requisitos de contagem de palavras.

Meu texto é enviado para algum lugar?

Não. A contagem acontece localmente no seu navegador usando o codificador de texto embutido do JavaScript; nada é enviado a um servidor.

Quantos bytes ocupam as letras acentuadas do português, como ç, ã e é?

Em UTF-8, letras com acento ou cedilha do português — como á, é, ã, õ e ç — ocupam 2 bytes cada, contra 1 byte de uma letra sem acento. Isso significa que um texto em português cheio de acentuação pode facilmente ocupar 20 a 30% mais bytes do que a mesma quantidade de caracteres em inglês.

O emoji 🇧🇷 (bandeira do Brasil) conta como 1 caractere?

Visualmente sim, mas tecnicamente uma bandeira como 🇧🇷 é formada por dois pontos de código Unicode combinados (letras regionais especiais), então pode aparecer como 2 caracteres na contagem, mesmo sendo exibida como um único emoji de bandeira na tela — vale ficar de olho nesse detalhe em campos com limite apertado.

Isso calcula bytes em codificações antigas, tipo ISO-8859-1 (Latin-1)?

Não, a ferramenta calcula apenas bytes em UTF-8 e UTF-16. Codificações mais antigas usadas em alguns sistemas legados, como ISO-8859-1, têm regras de bytes por caractere diferentes (geralmente 1 byte fixo, mas sem suporte a todos os caracteres acentuados). Se você precisa de compatibilidade com um sistema legado assim, é preciso um cálculo específico para essa codificação.

Quebras de linha e espaços também entram na contagem de bytes?

Sim. Um espaço comum ou quebra de linha (LF) conta como 1 byte em UTF-8. Ao colar um texto longo, espaços e quebras de linha acumulados podem passar despercebidos visualmente, mas ainda contribuem para o total de bytes — vale considerar isso quando estiver perto do limite.

Ferramentas relacionadas