Para representações externas, o UTF-8 é definitivamente o padrão. Algumas codificações de 8 bits ainda são strongs (principalmente na Europa) e algumas codificações de 16 bits ainda são strongs (principalmente no leste da Ásia), mas são codificações claramente legadas, em sua saída lenta. O UTF-8 é padrão não apenas no unix, mas também na web.
Para representações internas, não existe um padrão tão grande. Você encontrará alguns UTF-8, alguns UCS-2, alguns UTF-16 e alguns UCS-4, se você olhar em volta.
- O UTF-8 tem a vantagem de corresponder à representação comum e é um superconjunto do ASCII. Em particular, é a única codificação aqui onde um caractere nulo corresponde a um byte nulo, o que é importante se você tiver APIs C ao redor (incluindo chamadas de sistema unix e funções de biblioteca padrão).
- UCS-2 é uma sobrevivência histórica. Foi atraente porque foi pensado como uma codificação de largura fixa, mas não pode representar todo o Unicode, que é um limitador.
- As principais reivindicações da UTF-16 para a fama são APIs Java e Windows. As APIs do Unix (que gostam de UTF-8) são mais relevantes que as APIs do Windows se você estiver programando para o unix. Somente programas voltados para interação com APIs que gostam de UTF-16 tendem a usar UTF-16.
- O UCS-4 é atraente porque parece uma codificação de largura fixa. A coisa é, não é, na verdade. Por causa da combinação de caracteres, não existe uma codificação Unicode de largura fixa.
- Há também
wchar_t
. O problema é que são 2 bytes em algumas plataformas e 4 bytes em outros, e o conjunto de caracteres que ele representa não é específico. Com o Unicode sendo o conjunto de caracteres padrão de fato, os aplicativos mais novos tendem a evitarwchar_t
.
No mundo unix, o argumento que prevalece sobre todos eles é geralmente a compatibilidade com APIs unix, apontando para UTF-8. Não é universal, no entanto, não há resposta do tipo "sim ou não" para saber se a sua biblioteca precisa suportar outras codificações.
Não há diferença entre variantes unix nesse aspecto. O Mac OS X prefere caracteres decompostos para ter uma representação normalizada, então você pode querer fazer isso também: Isso economizará algum trabalho no OSX e não importará em outros unices.
Observe que não existe uma lista técnica em UTF-8. Uma marca de ordem de byte só faz sentido para codificações de tamanho super-byte. O requisito de que os arquivos codificados em UTF-8 comecem com o caractere U + FEFF é específico de alguns aplicativos da Microsoft.