Calculadora de tamanho em bytes UTF-8
Entradas
| Texto | Héllo |
|---|
Calculadora de tamanho em bytes UTF-8
Digite qualquer texto para descobrir seu tamanho em bytes UTF-8, seu tamanho em bytes UTF-16 e a contagem de caracteres (pontos de código). Letras ASCII ocupam um byte UTF-8 cada, letras acentuadas dois, a maioria dos outros sistemas de escrita três e emojis quatro — por isso o tamanho em bytes de uma string pode ser maior que o número de caracteres visíveis.
Entradas
Texto
Resultados
Insira um valor para ver os resultados.
Tamanho
Tamanho em bytes UTF-8
Uma cadeia de texto e o número de bytes que ela ocupa não são a mesma coisa. Na tela, uma palavra é uma sucessão de caracteres; no armazenamento e na rede é uma sequência de bytes, e as duas contagens raramente coincidem. Esta calculadora recebe um texto e devolve três números: quantos caracteres (pontos de código Unicode) ele contém, quantos bytes ele ocupa como UTF-8 e quantos bytes ele ocupa como UTF-16. É útil para dimensionar colunas de banco de dados, conferir limites de API e de comprimento de mensagens e entender por que uma cadeia de aparência curta pode ser surpreendentemente grande.
Caracteres versus bytes
Um caractere é uma unidade de escrita: uma letra, um dígito, um ideograma, um emoji. O Unicode atribui a cada um um número chamado ponto de código, escrito como U+00E9. Um byte é uma unidade de armazenamento de oito bits. Uma codificação é a regra que transforma pontos de código em bytes, e codificações diferentes produzem contagens de bytes diferentes para o mesmo texto.
Em português corrente a diferença passa despercebida, porque nas codificações comuns cada caractere ASCII acaba correspondendo a um número exato de bytes. A diferença aparece assim que o texto contém acentos, cedilhas, escritas não latinas ou emojis.
Como o UTF-8 dimensiona um caractere
O UTF-8 é uma codificação de largura variável: um caractere ocupa de um a quatro bytes conforme seu ponto de código.
U+0000–U+007F(ASCII: letras latinas sem acento, dígitos, pontuação comum): 1 byteU+0080–U+07FF(acentos e cedilhas latinos, grego, cirílico, hebraico, árabe): 2 bytesU+0800–U+FFFF(a maioria das escritas CJK e outras): 3 bytesU+10000em diante (emojis e caracteres raros): 4 bytes
Como os caracteres ASCII continuam com um byte, o UTF-8 é compatível com ASCII, o que explica em boa parte por que ele se tornou a codificação padrão da web e dos arquivos de texto.
Como o UTF-16 dimensiona um caractere
O UTF-16 armazena a maioria dos caracteres em uma única unidade de código de 16 bits, ou seja, dois bytes. Os caracteres acima de U+FFFF — emojis e outros símbolos raros — são guardados como um par substituto de duas unidades de código e, portanto, ocupam quatro bytes. Não existe o caso de um byte: até uma letra ASCII comum custa dois bytes em UTF-16. Esse é o formato de cadeias em memória de linguagens como Java, C# e JavaScript.
Exemplo resolvido
Tomemos o texto Héllo.
São 5 caracteres, mas 6 bytes UTF-8, porque o é cai na faixa de dois bytes. Em UTF-16, cada um dos 5 caracteres é uma unidade de código de dois bytes, totalizando 10 bytes.
Tomemos agora um único emoji, 😀 (U+1F600). É um caractere, mas está acima de U+FFFF. O UTF-8 o codifica com quatro bytes, e o UTF-16 o armazena como um par substituto, também quatro bytes — ainda assim, a contagem de caracteres é apenas 1.
Por que o tamanho em bytes importa
Os limites dos sistemas reais costumam ser contados em bytes, não em caracteres. Uma coluna VARCHAR(255) pode limitar bytes ou caracteres conforme o banco de dados e seu conjunto de caracteres; as restrições de comprimento de mensagens, os campos de payload das APIs, os tamanhos de cabeçalhos HTTP e os validadores de formulários são frequentemente expressos em bytes. Medir de antemão o tamanho em bytes UTF-8 indica se um valor caberá e quanto espaço ou largura de banda ele consumirá, algo que a contagem de caracteres sozinha não revela.
Calculadoras relacionadas
Para ver os valores reais de bytes de uma cadeia como códigos binários, hexadecimais e decimais, use o Converter texto em binário / hexadecimal / ASCII. Para medir o tamanho do texto depois de envolvido em Base64 para transporte, veja o Calculadora de Overhead de Codificação Base64. E para estimar quanta informação uma cadeia carrega em vez de quanto espaço ela ocupa, o Calculadora de Entropia de Shannon calcula sua entropia.
Perguntas frequentes (FAQ)
Por que o tamanho em bytes é maior que a contagem de caracteres?
Um caractere é o que se vê; um byte é como ele é armazenado. Em UTF-8, apenas os caracteres ASCII básicos (letras latinas sem acento, dígitos e pontuação comum) cabem em um único byte. Letras acentuadas como o é usam dois bytes, a maioria dos outros sistemas de escrita três e emojis quatro. Assim, qualquer texto com caracteres não ASCII ocupa mais bytes do que tem caracteres.
Em UTF-16 a diferença é ainda maior para texto ASCII, porque ali cada caractere usa pelo menos dois bytes.
Qual é a diferença entre UTF-8 e UTF-16?
Ambos são formas de transformar caracteres Unicode em bytes. O UTF-8 usa largura variável de um a quatro bytes por caractere e é compatível com ASCII, o que o torna a codificação dominante na web e em arquivos. O UTF-16 usa dois bytes para a maioria dos caracteres e quatro para os raros além do Plano Multilíngue Básico (como emojis); é a representação em memória comum de linguagens como Java, C# e JavaScript.
Para texto predominantemente latino, o UTF-8 é mais compacto; para textos dominados por escritas do Leste Asiático, os dois costumam ser comparáveis.
Quantos bytes ocupa um caractere?
Em UTF-8 depende do ponto de código: U+0000–U+007F (ASCII) um byte, U+0080–U+07FF (acentos latinos, grego, cirílico, hebraico, árabe) dois bytes, U+0800–U+FFFF (a maioria das escritas CJK e outras) três bytes e U+10000 em diante (emojis, caracteres raros) quatro bytes.
Em UTF-16 os mesmos caracteres ocupam dois bytes até U+FFFF e quatro acima, onde são armazenados como um par substituto (surrogate pair).
Quando o tamanho em bytes importa?
Armazenamento e transmissão são medidos em bytes, não em caracteres. Uma coluna de banco de dados declarada como VARCHAR(255) pode limitar bytes ou caracteres conforme o mecanismo e o conjunto de caracteres; campos de API, limites de comprimento de mensagens e validações de formulários costumam ser expressos em bytes. Conhecer o tamanho em bytes UTF-8 ajuda a prever se um valor caberá e quanto espaço ou largura de banda ele consumirá.
Próximas sugestões
Converter texto em binário / hexadecimal / ASCII
Digite qualquer texto para vê-lo em binário, hexadecimal e códigos decimais de caractere. O binário e o hexadecimal seguem a sequência de bytes UTF-8, enquanto o decimal indica o ponto de código Unicode de cada caractere — o valor ASCII familiar para texto simples em inglês.