O que são UTF-8 e Unicode? Pontos de código, codificação em bytes e porque o UTF-8 venceu
Publicado a 11/03/2026 · 4 min de leitura · Ferramentas para programadores
Daniel Okonkwo — Programador front-end e redator de Tecnologia na OneKitly
Desempenho web · Formatos de ficheiro
Verificado a partir de 2 fontes
O Unicode é um único catálogo que dá a cada carácter um número chamado ponto de código, escrito como U+0041 para A ou U+1F600 para uma carinha sorridente. O UTF-8 é uma regra para guardar esses números em bytes: os pontos de código até U+007F usam um byte, e os maiores usam dois, três ou quatro bytes. O UTF-8 venceu porque é retrocompatível com o ASCII, não tem ambiguidade de ordem de bytes e mantém o texto em inglês compacto ao mesmo tempo que representa todas as escritas do planeta.
O Unicode atribui a cada carácter um ponto de código; o UTF-8 codifica esses pontos de código em um a quatro bytes. Eis como funciona e porque bateu as alternativas.
Pontos de código versus bytes
Ajuda separar duas ideias. Um ponto de código é um número abstrato que identifica um carácter no catálogo Unicode, independentemente de como é armazenado. Uma codificação é a receita concreta que transforma esse número em bytes no disco ou na rede. O Unicode define atualmente pontos de código de U+0000 a U+10FFFF, mais de um milhão de espaços, dos quais cerca de 150 000 estão atribuídos.
A notação U+ é apenas hexadecimal, base 16. U+0041 é 65 em decimal, a letra A, e U+20AC é 8364 em decimal, um símbolo de moeda. Converter entre a forma hexadecimal e o decimal ou o binário é exatamente o tipo de mudança de base que um conversor de bases trata, e é assim que se verifica à mão que padrão de bytes um ponto de código deve produzir.
De um a quatro bytes, decidido pelo tamanho
O UTF-8 é uma codificação de comprimento variável. Os pontos de código de U+0000 a U+007F, o intervalo ASCII original, são guardados num único byte cujo bit superior é zero, por isso o texto em inglês é idêntico byte a byte aos antigos ficheiros ASCII. Os pontos de código de U+0080 a U+07FF ocupam dois bytes, U+0800 a U+FFFF três, e tudo até U+10FFFF, incluindo a maioria dos emoji, quatro.
O byte inicial anuncia o comprimento pelos seus bits altos: uma sequência de dois bytes começa por 110, de três bytes por 1110, de quatro bytes por 11110, e cada byte de continuação começa por 10. Esse padrão autodescritivo permite a um descodificador ressincronizar-se após um byte corrompido e torna impossível confundir um byte de continuação com o início de um carácter.
Porque o UTF-8 bateu as alternativas
Os principais rivais eram o UTF-16 e o UTF-32. O UTF-32 guarda cada ponto de código em quatro bytes fixos, simples de indexar mas esbanjador, quadruplicando o tamanho do texto em inglês comum. O UTF-16 usa dois ou quatro bytes e outrora dominou o Windows e o Java, mas precisa de uma marca de ordem de bytes para dizer que extremo vem primeiro e ainda usa pares substitutos para os pontos de código grandes, reintroduzindo o comprimento variável que queria evitar.
O UTF-8 evita tudo isso. Tem uma única ordem de bytes canónica, não precisa de marca e mantém-se compatível byte a byte com a enorme base instalada de ferramentas ASCII, por isso um ficheiro UTF-8 cheio de inglês simples abre corretamente em software anterior ao Unicode. Essas virtudes práticas, e não um decreto de comité, fizeram dele o padrão da web, onde cobre agora a esmagadora maioria das páginas.
Perguntas frequentes
- O UTF-8 é o mesmo que Unicode?
- Não. O Unicode é o catálogo que atribui a cada carácter um ponto de código. O UTF-8 é uma forma de codificar esses pontos de código em bytes. O Unicode diz qual é o número; o UTF-8 diz como o guardar.
- Quantos bytes usa um emoji em UTF-8?
- A maioria dos emoji simples fica acima de U+FFFF e ocupa quatro bytes. Alguns emoji visíveis são na verdade vários pontos de código unidos por junções de largura zero, por isso em disco podem ocupar muito mais bytes do que um carácter sugere.
- Porque é que o meu texto mostra caracteres ilegíveis como é?
- É uma incompatibilidade: bytes escritos como UTF-8 estão a ser lidos como uma codificação de um byte tipo Latin-1, por isso uma sequência de dois bytes aparece como dois caracteres errados. Declare e leia o ficheiro como UTF-8 em ambas as pontas para corrigir.
- O UTF-8 aumenta os ficheiros para texto não inglês?
- Às vezes. As línguas de escrita latina ficam perto de um byte por carácter, mas escritas como o chinês ou o japonês usam três bytes por carácter em UTF-8 contra dois em UTF-16. Para conteúdo misto ou maioritariamente latino, o UTF-8 costuma ser o mais compacto no total.
Artigos que podem interessar-lhe
Todos os guias →Ferramentas relacionadas
Fontes
Detetaste um erro neste artigo?