Unicode é um conjunto de caracteres. UTF são codificações.
O Unicode define um conjunto de caracteres com pontos de código correspondentes, isto é. valores que identificam inequivocamente caracteres no conjunto de caracteres Unicode.
Por exemplo, de acordo com unicode-table.com U+0041
corresponde ao capital A, U+03A3
é sigma do capital grego (Σ) e U+2603
é um boneco de neve (☃). U+
números são pontos de código. O Unicode nos diz qual símbolo corresponde a qual ponto de código, mas não nos diz como codificar esses pontos de código em bytes.
É aqui que o UTF (Unicode Transformation Format) entra em cena. UTF é uma codificação: mapeia pontos de código Unicode para sequências de bytes não ambíguas.
-
O UTF-32 é a codificação "burra". Todos os pontos de código Unicode têm no máximo 4 bytes de comprimento, portanto, o UTF-32 simplesmente interpreta o ponto de código como um número de 4 bytes (32 bits, daí o nome) com ordem de bytes big endian . Então,
U+2603
é codificado como0x00002603
.O UTF-32 é muito simples, mas também muito redundante. Os caracteres mais usados caem no intervalo ASCII e são representados por pontos de código 0-127 em Unicode, portanto, em arquivos codificados em UTF-32, quase 3 em 4 bytes serão zeros. Quase toda sentença inglesa se torna 4 vezes mais longa (em bytes) quando codificada em UTF-32 em vez de ASCII.
-
O UTF-8 (muito comum na Internet) usa apenas 1 byte para caracteres ASCII, por isso não introduz nenhuma sobrecarga em arquivos somente ASCII (cada arquivo ASCII também é um arquivo UTF-8 com o arquivo ASCII). mesmo conteúdo). Outros caracteres requerem até 6 bytes.
-
O UTF-16 (usado pelo Windows, apenas para citar um exemplo) é um compromisso entre o UTF-32 e o UTF-8. Pontos de código são codificados para sequências de 16 ou 32 bits. É mais redundante que UTF-8 na maioria dos casos, mas mais fácil de manter e mais rápido de processar.
Caracteres diferentes podem ter diferentes representações em diferentes codificações UTF-x. Por exemplo, as seqüências UTF-8 podem atingir até 6 bytes, enquanto as seqüências UTF-16 têm no máximo 4 bytes, embora ambas codifiquem o mesmo conjunto de caracteres (Unicode). Codificações mais refinadas (UTF-8) usam mais bits para indicar o comprimento da seqüência, portanto, para valores codificados altos, os valores codificados são mais longos e menos ideais.
A resposta de dsolimano explica o comportamento do seu shell.