Quatro formas de contar o mesmo texto

Computadores armazenam texto como números, e existe mais de uma forma razoável de contar esses números. Apps e jogos escolhem uma — geralmente sem avisar —, então o mesmo nome pode caber em um lugar e ser “longo demais” em outro.

O emoji de família medido de quatro formas: 1 caractere visível, 5 pontos de código, 8 unidades UTF-16 e 18 bytes UTF-8.
O mesmo texto, quatro tamanhos diferentes.
As quatro medidas
MedidaO que conta
Grafemas (caracteres que você vê)O que um leitor percebe como um único caractere, mesmo quando é formado por várias peças.
Pontos de códigoCada caractere Unicode separadamente, incluindo uniões invisíveis e marcas combinantes.
unidades UTF-16A unidade de armazenamento usada no JavaScript, no Java, no Windows e em muitos apps. Caracteres acima de U+FFFF ocupam duas.
Bytes UTF-8O tamanho quando armazenado ou enviado como UTF-8, a codificação usual da web: de 1 a 4 bytes por ponto de código.

Exemplos testados

Todos os números abaixo foram gerados por código, não digitados à mão: os grafemas com Intl.Segmenter no Node.js 22.22.2 (ICU 78.2, Unicode 17.0) e as outras contagens a partir do texto codificado, conferidas em Python. Versões diferentes de software podem às vezes discordar sobre os limites de grafemas em escritas complexas.

Dez textos, quatro tamanhos cada
TextoO que éGrafemasPontos de códigoUTF-16Bytes UTF-8
LunaLetras latinas simples4444
Zoëë como um único caractere (U+00EB)3334
Zoëe + trema combinante (U+0308)3445
𝓛𝓾𝓷𝓪Letras cursivas em negrito (Mathematical Alphanumeric Symbols)44816
꧁Luna꧂Nome em uma moldura de pontuação javanesa66610
Luna🔥Nome + um emoji5568
👍🏽Emoji + modificador de tom de pele1248
🇯🇵Bandeira (duas letras indicadoras regionais)1248
👨‍👩‍👧Emoji de família (três emojis unidos por uniões de largura zero)15818
ليلىLetras árabes4448

Grafemas: o que você realmente vê

O Unicode Standard Annex #29 define os agrupamentos de grafemas estendidos — os caracteres como o usuário os percebe. Uma letra com acento combinante, um emoji com tom de pele, uma bandeira formada por duas letras indicadoras regionais e um emoji de família unido por uniões de largura zero são, cada um, um grafema.

Por dentro do emoji de família

Um caractere visível, cinco pontos de código
Ponto de códigoNomeUTF-16Bytes
U+1F468Homem24
U+200DZero Width Joiner13
U+1F469Mulher24
U+200DZero Width Joiner13
U+1F467Menina24

Pontos de código: os números do Unicode

Um ponto de código é o número de um caractere no Unicode, escrito como U+ seguido de dígitos hexadecimais. “ë” pode ser escrito como um único ponto de código (U+00EB) ou como “e” mais U+0308 COMBINING DIAERESIS. Os dois parecem idênticos — é por isso que dois nomes que parecem iguais podem ser contados de forma diferente, e por isso alguns apps normalizam o texto antes.

UTF-16: por que letras estilizadas contam em dobro

O UTF-16 armazena pontos de código até U+FFFF em uma unidade de 16 bits e tudo acima disso em duas (um par substituto). As letras em negrito, cursivas e góticas da NameFonts vêm, em sua maioria, do bloco Mathematical Alphanumeric Symbols (U+1D400–U+1D7FF), e a maioria dos emojis também fica acima de U+FFFF — então cada um ocupa duas unidades. Os nove novos emojis do Unicode 18.0 não são exceção. Em JavaScript, "𝓛".length é 2.

UTF-8: bytes no disco e na rede

O UTF-8 usa 1 byte para letras ASCII, 2 bytes para a maioria dos acentos latinos, grego, cirílico, árabe e hebraico, 3 bytes para a maioria dos outros caracteres até U+FFFF (incluindo CJK e muitos símbolos) e 4 bytes acima disso. Limites de bancos de dados e de rede costumam ser expressos em bytes.

Qual delas meu app usa?

Não listamos limites de apps ou jogos específicos: eles raramente são documentados e mudam. Você descobre qual unidade um app conta com um teste rápido:

  1. Digite um nome simples até o limite e anote o número.
  2. Troque uma letra por uma letra estilizada (por exemplo, do gerador de letra cursiva).
  3. Se o nome passar a contar um a mais, o app conta unidades UTF-16; se a contagem continuar igual, ele conta grafemas ou pontos de código.
  4. Teste “Zoë” escrito das duas formas (da tabela acima) para diferenciar grafemas de pontos de código.

Perguntas frequentes

Por que meu nome conta mais caracteres do que eu vejo?

Alguns caracteres visíveis são formados por vários pontos de código, e caracteres acima de U+FFFF usam duas unidades UTF-16. Apps que contam pontos de código ou unidades UTF-16 mostram um número maior do que o que você vê.

Um grafema é a mesma coisa que uma letra?

Nem sempre. Um grafema é o que um leitor percebe como um único caractere. Em texto latino geralmente é uma letra, mas uma sequência de emojis ou uma letra com marcas combinantes também é um grafema.

Fontes

Próximo passo

Cole seu próprio nome para ver as quatro contagens, caractere por caractere.