Codificações de Caracteres e Unicode: O Guia Definitivo para UTF-8, UTF-16 e mais
Nos primórdios da computação, representar texto era simples: cada carácter cabia em 7 ou 8 bits (ASCII). Mas, à medida que a computação se tornou global, precisámos de uma forma de representar cada carácter de cada língua do mundo. Esta é a história do Unicode e das codificações que o alimentam.
1. O Padrão Unicode
O Unicode não é uma codificação em si, mas um conjunto de caracteres universal. Atribui um número único, chamado ponto de código, a cada carácter (ex: U+0041 para 'A'). No entanto, ainda precisamos de uma forma de armazenar esses números em binário.
UTF-8 (O Rei da Web)
O UTF-8 é uma codificação de largura variável que utiliza de 1 a 4 bytes por carácter. É retrocompatível com ASCII.
- Prós: Eficiente para línguas ocidentais, robusto contra corrupção de dados e o padrão universal para a web.
UTF-16
Utiliza 2 ou 4 bytes. É a codificação nativa do Windows (NTFS) e de muitos ambientes de programação como Java e JavaScript.
UTF-32
Utiliza exatamente 4 bytes para cada carácter. Embora simples para indexação, é muito ineficiente em termos de memória.
2. Codificações Legadas e Regionais
Antes do Unicode se tornar dominante, diferentes regiões utilizavam os seus próprios padrões, muitos dos quais ainda são encontrados hoje.
Codificações Chinesas (Família GB)
- GB2312: O padrão inicial para o Chinês Simplificado.
- GBK: Uma extensão do GB2312 para suportar mais caracteres.
- GB18030: O padrão obrigatório atual na China, suportando Chinês Simplificado e Tradicional e mapeando totalmente para Unicode.
Codificações Japonesas
- Shift-JIS: Historicamente a codificação mais popular para o Japonês, utilizada extensivamente no Windows e em websites antigos.
Coreano e Chinês Tradicional
- EUC-KR: Uma codificação legada comum para o Coreano.
- Big5: O padrão para caracteres de Chinês Tradicional utilizado principalmente em Taiwan e Hong Kong.
3. Codificações Legadas Ocidentais
ISO-8859-1 (Latin-1)
Uma codificação de 8 bits que cobre a maioria das línguas da Europa Ocidental.
Windows-1252
Uma ligeira variação da ISO-8859-1 utilizada por defeito em versões antigas do Windows.
4. Nuances Técnicas: BOM e Endianness
Marca de Ordem de Bytes (BOM)
A BOM é uma sequência especial de bytes no início de um ficheiro de texto (ex: EF BB BF para UTF-8). Indica ao software qual a codificação e a ordem de bytes que está a ser utilizada. Embora útil para UTF-16, é frequentemente desencorajada para UTF-8 em ambientes web.
Little Endian vs. Big Endian
Relevante para UTF-16 e UTF-32, refere-se à ordem em que os bytes são armazenados na memória.
Resumo Comparativo
| Codificação | Bytes por Carácter | Compatibilidade | Melhor Uso |
|---|---|---|---|
| UTF-8 | 1-4 | ASCII | Web, Linux, Mac |
| UTF-16 | 2 ou 4 | Nenhuma | Windows, Java, JS |
| GB18030 | 1, 2 ou 4 | GBK | Conformidade Governamental Chinesa |
| ASCII | 1 | Universal | Sistemas Legados, apenas Inglês |
Conclusão
O mundo estabeleceu-se largamente no UTF-8 como o padrão para troca de dados. No entanto, compreender codificações legadas como GBK ou Shift-JIS continua a ser vital ao lidar com sistemas legados ou software regional específico. Em caso de dúvida, utilize sempre UTF-8 sem BOM para aplicações modernas.