Qual é a diferença entre o UTF-8 e o UTF-16?
UTF significa Unicode Transformation Format (Formato de Transformação Unicode). É uma família de padrões para codificar o conjunto de caracteres Unicode no seu valor binário equivalente. UTF foi desenvolvido para que os usuários tenham um meio padronizado de codificação dos caracteres com a quantidade mínima de espaço.
UTF-8 e UTF 16 são apenas dois dos padrões estabelecidos para codificação. Eles diferem apenas em quantos bytes eles usam para codificar cada caractere. Como ambos são codificação de largura variável, eles podem usar até quatro bytes para codificar os dados, mas quando se trata do mínimo, UTF-8 usa apenas 1 byte (8bits) e UTF-16 usa 2 bytes(16bits).
Isso tem um enorme impacto no tamanho resultante dos arquivos codificados. Ao usar apenas caracteres ASCII, um arquivo codificado UTF-16 seria aproximadamente duas vezes maior que o mesmo arquivo codificado com UTF-8.
A principal vantagem do UTF-8 é que ele é retrocompatível com ASCII. O conjunto de caracteres ASCII é de largura fixa e usa apenas um byte.
Quando codifica um ficheiro que usa apenas caracteres ASCII com UTF-8, o ficheiro resultante seria idêntico a um ficheiro codificado com ASCII. Isto não é possível quando se usa UTF-16 pois cada caractere teria dois bytes de comprimento.
O software que não é Unicode seria incapaz de abrir o ficheiro UTF-16 mesmo que só tivesse caracteres ASCII.
UTF-8 é um formato orientado a bytes e por isso não tem problemas com redes ou ficheiros orientados a bytes. O UTF-16, por outro lado, não é orientado a bytes e precisa estabelecer uma ordem de bytes para poder trabalhar com redes orientadas a bytes. UTF-8 também é melhor em recuperar de erros que corrompem partes do arquivo ou fluxo, pois ainda pode decodificar o próximo byte não corrompido.
UTF-16 faz exatamente a mesma coisa se alguns bytes forem corrompidos, mas o problema é quando alguns bytes são perdidos. O byte perdido pode misturar as seguintes combinações de bytes e o resultado final seria garbled
1. UTF-8 e UTF-16 são ambos usados para codificar caracteres
2.UTF-8 usa um byte no mínimo na codificação dos caracteres enquanto UTF-16 usa dois
3. Um arquivo codificado UTF-8 tende a ser menor que um arquivo codificado UTF-16
4.UTF-8 é compatível com ASCII enquanto UTF-16 é incompatível com ASCII
5.UTF-8 é orientado para bytes enquanto UTF-16 não é
6. O UTF-8 é melhor na recuperação de erros do que o UTF-16
Ambos podem codificar a mesma informação: os zilhões e meio de caracteres completos definidos pelo padrão Unicode.
Eles apenas usam números diferentes de bits/bytes para fazê-lo, e por causa dessa diferença, eles acabam representando caracteres com códigos de caracteres diferentes, embora semelhantes e facilmente traduzíveis.
UTF-8 usa um mínimo de 1 byte de 8 bits para codificar caracteres. Para os 128 caracteres de 7 bits do conjunto de caracteres ASCII, ele é compatível com o ASCII: um texto ASCII de alfabeto romano codificado em UTF-8 será exibido normalmente em um sistema que não entende UTF-8. Os caracteres acentuados não fazem parte do ASCII e, portanto, todos eles serão mais ou menos falsificados. Além de 1 byte, o UTF-8 pode usar 2, 3 ou 4 bytes para codificar o resto do conjunto de caracteres Unicode. Devido à forma como ele usa o primeiro byte de sequências multi-byte, UTF-8 usa 3 bytes para alguns caracteres que requerem apenas 2 bytes em UTF-16.
UTF-16 usa um mínimo de 2 bytes/16 bits. Isto torna-o incompatível com o ASCII. Dado um /A-Za-z/ texto em UTF-16, um sistema que não entende UTF-16 fará uma bagunça dele (mostrando um caractere nulo antes de cada caractere).
Alguns exemplos:
"A" em ASCII é hex 0x41; em UTF-8 é também 0x41; em UTF-16 é 0x0041
"À" em latim-1 é 0xC0; em UTF-8 é 0xC3 0x80; em UTF-16 é 0x00C0
A letra tibetana ? em UTF-8 é 0xE0 0xBD 0xA8; em UTF-16 é 0x0F68
Este caracter*: Directório: /info/... em UTF-8 é 0xF0 0xA0 0x80 0x8B; em UTF-16 é 0xD840 0xDC0B
Nos três primeiros exemplos, o caractere UTF-16 tem o mesmo número hexadecimal que o codepoint Unicode; para o caractere de duas unidades no último exemplo, o codepoint é U+2000B.
Wikipedia tem uma comparação detalhada das vantagens/desvantagens técnicas de UTF-8 e UTF-16:
Artigos semelhantes
- Porque é que a Microsoft não usa o UTF 8 no Windows 10?
- Qual é a diferença entre o Bluetooth no Android e no iPhone? Por que não somos capazes de transferir arquivos entre eles?
- A diferença entre 9 e 45 pontos de foco (Canon 800d Vs. Canon 200d) faz uma enorme diferença nas DSLRs?
- Qual é a diferença entre a Cyber Monday e a Black Friday, e qual é a melhor para fazer compras?