Contador de bytes por codificação

Meça quantos bytes o seu texto ocupa em UTF-8, Shift_JIS, EUC-JP, UTF-16 e JIS (ISO-2022-JP). Útil para verificar limites de colunas de banco de dados e limites de formulários legados.

Dicas

  • Em UTF-8, caracteres alfanuméricos de meia largura ocupam 1 byte cada, enquanto caracteres japoneses (hiragana, katakana, kanji) geralmente ocupam 3 bytes cada, então o mesmo número de caracteres pode significar quantidades de bytes muito diferentes entre um texto em inglês e um em japonês.
  • Sistemas antigos que aplicam limites baseados em bytes a colunas como VARCHAR(255) atingem o limite muito mais rápido com texto japonês do que com um texto em inglês de mesmo comprimento em caracteres.
  • A maioria dos emojis é representada por um par substituto de duas unidades de código, ocupando 4 bytes tanto em UTF-8 quanto em UTF-16, o que explica por que os contadores de caracteres das redes sociais às vezes atingem o limite antes do esperado.
  • Se você já sabe uma quantidade de bytes e quer convertê-la para KB, MB ou outras unidades, use nossa ferramenta irmã "Conversor de unidades de bytes" — ela cuida do cálculo inverso, de texto para quantidade de bytes.

Perguntas frequentes

O comprimento em caracteres conta quantos caracteres visíveis existem em uma string, enquanto o comprimento em bytes indica quantos bytes (octetos) são necessários para armazenar ou transmitir essa string como dados de computador. Em texto ASCII puro os dois valores coincidem, mas em textos com caracteres multibyte como o japonês, o comprimento em bytes pode ser várias vezes maior que o comprimento em caracteres.

O UTF-8 usa uma codificação de tamanho variável de 1 a 4 bytes por caractere, e a maioria dos caracteres japoneses (hiragana, katakana, kanji comuns) ocupa 3 bytes. Já o Shift_JIS codifica a maioria dos caracteres japoneses em 2 bytes, então o mesmo texto japonês geralmente ocupa mais espaço em UTF-8 do que em Shift_JIS.

Depende do mecanismo de banco de dados e das configurações de conjunto de caracteres da coluna. O VARCHAR(n) do MySQL geralmente é limitado a "n caracteres", mas também existem limites internos separados baseados em bytes (como o comprimento máximo de chave indexável), então um texto com emojis às vezes pode causar erros. Consulte a documentação específica do seu SGBD para saber o comportamento exato.

Caracteres alfanuméricos e símbolos de meia largura ocupam apenas 1 byte tanto em UTF-8, Shift_JIS quanto em EUC-JP, enquanto caracteres de largura total (hiragana, katakana, kanji, símbolos de largura total) ocupam de 2 a 3 bytes dependendo da codificação. Uma string de 10 caracteres pode ocupar apenas 10 bytes se forem todos de meia largura, ou de 20 a 30 bytes se forem todos de largura total.

Esta ferramenta recebe uma string de texto como entrada e calcula seu comprimento em bytes para cada codificação. Já a ferramenta "Conversor de unidades de bytes" recebe uma quantidade de bytes que você já conhece (por exemplo, 1.500.000 bytes) e a converte em unidades como KB, MB ou GB. Use esta ferramenta quando quiser ir de "texto para quantidade de bytes", e a outra quando quiser ir de "quantidade de bytes para outras unidades".
ツールくん

Curiosidade — A relação oculta entre os limites de caracteres das redes sociais e a contagem de bytes

Versões antigas do conjunto de caracteres "utf8" do MySQL tinham uma limitação surpreendente: na verdade não conseguiam armazenar emojis Unicode (caracteres suplementares a partir de U+10000). O UTF-8 em si é uma codificação de tamanho variável que suporta até 4 bytes por caractere, mas o "utf8" do MySQL era historicamente limitado a 3 bytes por caractere, causando erros de INSERT sempre que um texto com emojis era salvo. Migrar para o "utf8mb4", que suporta corretamente todo o intervalo de 4 bytes, é hoje a solução recomendada — um exemplo bem conhecido de por que entender a relação entre codificação de caracteres e contagem de bytes realmente importa na prática.

Na época em que o Twitter (hoje X) aplicava seu famoso limite de 140 caracteres, houve um longo debate sobre a equidade entre idiomas: usuários de japonês conseguiam expressar uma ideia bastante completa em 140 caracteres, enquanto usuários de inglês mal conseguiam escrever 20 a 30 palavras no mesmo limite. Isso acontece porque um único caractere kanji japonês pode carregar muito mais informação do que uma única letra em inglês. O Twitter acabou introduzindo um sistema de contagem ponderada, no qual idiomas como o japonês contavam como "1 caractere = 1 ponto", enquanto outros contavam certos caracteres como "2 bytes = 1 ponto", numa tentativa de equilibrar as coisas entre os idiomas.

O SMS em celulares tem uma peculiaridade parecida. Um SMS codificado no padrão GSM permite até 160 caracteres por mensagem, mas assim que inclui um único caractere fora do conjunto de caracteres GSM de 7 bits — como um emoji ou um caractere japonês —, a codificação muda para UCS-2 (aproximadamente equivalente ao UTF-16), e o limite cai bruscamente para apenas 70 caracteres. O fato de usar um único caractere japonês poder reduzir o comprimento disponível da mensagem a menos da metade é um exemplo perfeito e real da relação entre codificação de caracteres e contagem de bytes que esta ferramenta foi criada para medir.