Caracteres versus bytes: por que seu texto é maior do que você pensa

9 de julho de 2026 · 5 min de leitura
Experimentar a ferramentaCalculadora de tamanho de texto →

Você cola uma string que parece ter 100 caracteres em um campo com limite de 100 caracteres e ela é rejeitada por ser muito longa. Como? A resposta é que um caractere e um byte não são a mesma coisa, e a lacuna entre eles, invisível até morder você, é um dos cantos mais confusos do trabalho com texto. Aqui está o que realmente está acontecendo.

A distinção central

No ASCII simples, as letras, dígitos e símbolos comuns do inglês básico, um caractere é exatamente um byte, então as contagens coincidem e ninguém pensa nisso. Mas a web funciona em UTF-8, uma codificação em que caracteres fora desse conjunto básico ocupam mais de um byte cada. Uma letra acentuada como é tem dois bytes. Muitos caracteres asiáticos têm três bytes. Emoji normalmente têm quatro bytes. Portanto, o número de bytes que seu texto ocupa pode ser muito maior do que o número de caracteres que você vê, dependendo inteiramente de quais são esses caracteres.

Por que o tamanho do byte é importante

A lacuna é importante porque muitos limites são definidos em bytes, não em caracteres. Os campos do banco de dados geralmente são dimensionados em bytes, portanto, um campo que contém 100 bytes pode acomodar apenas 50 caracteres se forem multibyte. Cargas de rede, limites de tamanho de mensagens e cotas de armazenamento são medidos em bytes. Algumas APIs limitam os corpos da solicitação por tamanho de byte. É exatamente por isso que o texto que parece bem abaixo do limite de caracteres pode ser rejeitado por ser muito longo, o limite era em bytes e suas letras acentuadas ou emoji aumentavam a contagem de bytes, mesmo que a contagem de caracteres parecesse boa.

Como o UTF-8 atribui bytes

UTF-8 tem largura variável por design. Ele codifica as letras e dígitos latinos básicos em um único byte cada, o que mantém o texto simples em inglês compacto e idêntico byte por caractere. Além disso, ele usa dois bytes para a maioria dos caracteres latinos e gregos acentuados, três bytes para uma grande variedade, incluindo a maioria dos caracteres chineses, japoneses e coreanos, e quatro bytes para o restante, incluindo a maioria dos emojis e alguns scripts raros. Portanto, uma string de 100 caracteres pode ocupar de 100 a 400 bytes, dependendo de seu conteúdo. Um tweet de emoji é muito mais pesado do que um tweet de letras simples.

A calculadora de tamanho de texto TextCaret mostra o tamanho exato de bytes do seu texto em UTF-8 junto com a contagem de caracteres, para que você possa ver precisamente como ele mede em relação a um limite baseado em bytes, tudo calculado em seu navegador.

A surpresa dos emojis

Os emojis merecem menção especial porque causam mais confusão. A maioria dos emojis tem quatro bytes em UTF-8, e alguns, aqueles criados pela combinação de vários pontos de código, como certos sinalizadores ou variantes de tons de pele, têm ainda mais. Portanto, um único emoji pode usar tanto espaço de bytes quanto quatro caracteres latinos simples, e um emoji composto pode usar muito mais. Uma mensagem visualmente curta, mas com muitos emojis, pode ultrapassar inesperadamente o limite de bytes. Se você já teve uma mensagem curta e cheia de emojis rejeitada, é por isso.

A lição prática

Quando um limite é definido em caracteres, a maioria das postagens nas redes sociais conta caracteres. Quando um limite é definido em bytes, muitos campos de banco de dados, APIs e protocolos contam bytes e lembre-se de que acentos e emojis aumentam a contagem de bytes. Quando você não tiver certeza de qual sistema usa e seu texto contiver algo além de ASCII simples, verifique se o tamanho do byte é seguro. Ver os dois números ao mesmo tempo elimina as suposições e evita a rejeição "mas parecia curto o suficiente".

Experimentar a ferramentaCalculadora de tamanho de texto →