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.
A contagem de caracteres e a de bytes não são a mesma coisa
Dez caracteres ocuparem trinta bytes é coisa de todo dia assim que entra em cena um texto não latino. **A contagem de bytes de uma mesma cadeia muda com a codificação:** em UTF-8 um caractere japonês ocupa três bytes e um emoji quatro, ao passo que em Shift_JIS um caractere japonês cabe em dois. Esta ferramenta mostra de uma vez quantos bytes a sua entrada soma sob cinco esquemas ao mesmo tempo, a saber UTF-8, Shift_JIS, EUC-JP, UTF-16 e ISO-2022-JP.
**A contagem de unidades de código UTF-16 exibida ao lado é exatamente o número que `.length` devolve em JavaScript.** Aqui está o tropeço mais frequentemente ignorado, pois os emoji e certos caracteres são representados por um par substituto de duas unidades, de modo que **o que uma pessoa conta como um caractere, `.length` conta como dois.** Por isso um limite de comprimento implementado com `.length` recusa antes do previsto uma entrada que contenha emoji. Do lado do banco de dados dá-se o mesmo: se um `VARCHAR(255)` conta bytes ou caracteres depende do produto e de sua configuração, então ter os dois números à vista impede que você julgue mal.
Como se usa
- Digite seu texto As contagens se atualizam assim que você cola. Quebras de linha são perfeitamente admissíveis.
- Compare a contagem de caracteres com a de bytes **Um único caractere pode chegar a três bytes em UTF-8.**
- Leia a linha da codificação que lhe interessa Veja o esquema que o seu armazenamento ou o seu destino realmente empregam.
- Consulte a contagem de unidades UTF-16 **Se o seu limite é aplicado com `.length` do JavaScript, é este o número que decide o resultado.**
Dicas para aproveitar melhor
- 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.
Quando é útil
Evitar um estouro numa coluna
**Onde o armazenamento se limita por bytes, o texto japonês cabe em pouco mais de um terço do que se suporia.** Você pode conferir antes de inserir.
Projetar o limite de entrada de um formulário
Dá o material para decidir se o teto vai em caracteres ou em bytes.
Conectar-se a um sistema herdado
Em arquivos de largura fixa e em trocas em Shift_JIS, a contagem de bytes é a posição da coluna.
Testar como os emoji são tratados
**Você pode confirmar se uma cadeia com pares substitutos é tomada com o comprimento que pretende.**
Termos de codificação de caracteres
- UTF-8
- Um esquema que representa os caracteres do mundo em um a quatro bytes de comprimento variável. **Por regra, ASCII ocupa um, o japonês três e os emoji quatro.**
- Shift_JIS
- Um esquema para o japonês em que **um caractere japonês cabe em dois bytes.** Segue em uso em sistemas antigos e arquivos de largura fixa.
- EUC-JP
- Um esquema japonês longamente usado em sistemas UNIX. Um caractere japonês ocupa de ordinário dois bytes.
- UTF-16
- Um esquema que representa os caracteres em unidades de dezesseis bits. **As cadeias do JavaScript são contadas nestas unidades.**
- Par substituto
- O arranjo pelo qual **um caractere grande demais para uma unidade UTF-16 é expresso como um par de duas.** Os emoji e certos caracteres caem nesta classe.
- ISO-2022-JP
- Um esquema que comuta conjuntos de caracteres por sequências de escape, longamente usado no correio japonês. Também é chamado simplesmente de JIS.
Perguntas frequentes
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.