table Qual é a diferença entre Unicode e UTF-8?




utf-8 table html (8)

Esta questão já tem uma resposta aqui:

Considerar:

É verdade que unicode=utf16 ?

Muitos estão dizendo que o Unicode é um padrão, não uma codificação, mas a maioria dos editores suporta salvar como codificação Unicode.


UTF-16 e UTF-8 são codificações de Unicode. Ambos são Unicode; um não é mais Unicode do que o outro.

Não deixe que um infeliz artefato histórico da Microsoft confunda você.


O desenvolvimento do Unicode teve como objetivo criar um novo padrão para mapear os caracteres na maioria das linguagens que estão sendo usadas atualmente, junto com outros caracteres que não são essenciais, mas que podem ser necessários para a criação do texto. O UTF-8 é apenas uma das muitas maneiras de codificar os arquivos, pois há muitas maneiras de codificar os caracteres dentro de um arquivo no Unicode.

Fonte:

http://www.differencebetween.net/technology/difference-between-unicode-and-utf-8/


Vamos começar lembrando que os dados são armazenados como bytes; Unicode é um conjunto de caracteres onde os caracteres são mapeados para pontos de código (inteiros exclusivos) e precisamos de algo para converter esses dados de pontos de código em bytes. É aí que o UTF-8 vem na chamada codificação - simples!


Não é tão simples assim.

O UTF-16 é uma codificação de largura variável de 16 bits. Simplesmente chamar algo "Unicode" é ambíguo, já que "Unicode" refere-se a um conjunto inteiro de padrões para codificação de caracteres. Unicode não é uma codificação!

http://en.wikipedia.org/wiki/Unicode#Unicode_Transformation_Format_and_Universal_Character_Set

e, claro, o obrigatório Joel On Software - O Absoluto Mínimo Todo Desenvolvedor de Software Absolutamente, Positivamente Deve Saber Sobre o Unicode e o Conjuntos de Caracteres (Sem Desculpas!) link.


Há muito mal-entendido sendo exibido aqui. O Unicode não é uma codificação, mas o padrão Unicode é dedicado principalmente à codificação.

A ISO 10646 é o conjunto de caracteres internacionais com que você (provavelmente) se importa. Ele define um mapeamento entre um conjunto de caracteres nomeados (por exemplo, "Letra latina A" ou "letra minúscula alfa") e um conjunto de pontos de código (um número atribuído a cada um - por exemplo, 61 hexadecimal e hexadecimal 3B1 para aqueles dois, respectivamente; para pontos de código Unicode, a notação padrão seria U + 0061 e U + 03B1).

Ao mesmo tempo, o Unicode definia seu próprio conjunto de caracteres, mais ou menos como um concorrente da ISO 10646. Esse era um conjunto de caracteres de 16 bits, mas não era UTF-16; era conhecido como UCS-2. Ele incluiu uma técnica bastante controversa para tentar manter o número de caracteres necessários no mínimo (Han Unification - basicamente tratando de caracteres chineses, japoneses e coreanos que eram bastante parecidos como sendo o mesmo personagem).

Desde então, o consórcio Unicode admitiu tacitamente que isso não funcionaria e agora se concentra principalmente em maneiras de codificar o conjunto de caracteres ISO 10646. Os métodos principais são UTF-8, UTF-16 e UCS-4 (também conhecido como UTF-32). Aqueles (exceto para UTF-8) também têm variantes LE (little endian) e BE (big-endian).

Por si só, "Unicode" poderia se referir a quase qualquer um dos itens acima (embora possamos provavelmente eliminar os outros que ele mostra explicitamente, como UTF-8). O uso não qualificado de "Unicode" provavelmente acontece com mais freqüência no Windows, onde quase certamente se referirá a UTF-16. Versões anteriores do Windows NT adotaram o Unicode quando o UCS-2 era atual. Depois que o UCS-2 foi declarado obsoleto (em torno do Win2k, se a memória servir), eles mudaram para UTF-16, que é o mais semelhante ao UCS-2 (na verdade, é idêntico para caracteres no "basic multilingual plane", que abrange muito, incluindo todos os caracteres para a maioria dos idiomas da Europa Ocidental).


a maioria dos editores suportam salvar como codificação 'Unicode', na verdade.

Esta é uma má infelicidade perpetrada pelo Windows.

Como o Windows usa a codificação UTF-16LE internamente como o formato de armazenamento de memória para cadeias de caracteres Unicode, ela considera essa codificação natural do texto Unicode. No mundo do Windows, existem seqüências de caracteres ANSI (a página de códigos do sistema na máquina atual, sujeitas a total impossibilidade de uso) e há cadeias Unicode (armazenadas internamente como UTF-16LE).

Tudo isso foi inventado nos primórdios do Unicode, antes de percebermos que o UCS-2 não era suficiente e antes que o UTF-8 fosse inventado. É por isso que o suporte do Windows para UTF-8 é ruim.

Esse esquema de nomenclatura equivocado tornou-se parte da interface do usuário. Um editor de texto que usa o suporte de codificação do Windows para fornecer um intervalo de codificações descreverá automática e inadequadamente UTF-16LE como "Unicode" e UTF-16BE, se fornecido, como "Unicode big-endian".

(Outros editores que fazem codificações, como o Notepad ++, não têm esse problema.)

Se isso faz você se sentir melhor, as strings 'ANSI' não são baseadas em nenhum padrão ANSI.


Como Rasmus afirma em seu artigo "A diferença entre UTF-8 e Unicode?" (link fixo):

Se fosse feita a pergunta "Qual é a diferença entre UTF-8 e Unicode?", Você responderia com confiança com uma resposta curta e precisa? Nestes dias de internacionalização, todos os desenvolvedores devem ser capazes de fazer isso. Suspeito que muitos de nós não entendemos esses conceitos tão bem quanto deveríamos. Se você acha que pertence a esse grupo, leia esta breve introdução aos conjuntos de caracteres e codificações.

Na verdade, comparar UTF-8 e Unicode é como comparar maçãs e laranjas:

UTF-8 é uma codificação - Unicode é um conjunto de caracteres

Um conjunto de caracteres é uma lista de caracteres com números exclusivos (esses números são às vezes chamados de "pontos de código"). Por exemplo, no conjunto de caracteres Unicode, o número de A é 41.

Uma codificação, por outro lado, é um algoritmo que traduz uma lista de números para binário, para que possa ser armazenado em disco. Por exemplo, o UTF-8 traduziria a sequência numérica 1, 2, 3, 4 assim:

00000001 00000010 00000011 00000100 

Nossos dados agora são traduzidos em binários e agora podem ser salvos em disco.

Todos juntos agora

Digamos que um aplicativo leia o seguinte no disco:

1101000 1100101 1101100 1101100 1101111 

O aplicativo sabe que esses dados representam uma cadeia Unicode codificada com UTF-8 e deve mostrar isso como texto para o usuário. Primeiro passo, é converter os dados binários em números. O aplicativo usa o algoritmo UTF-8 para decodificar os dados. Neste caso, o decodificador retorna isto:

104 101 108 108 111 

Como o aplicativo sabe que esta é uma string Unicode, pode assumir que cada número representa um caractere. Usamos o conjunto de caracteres Unicode para traduzir cada número para um caractere correspondente. A string resultante é "olá".

Conclusão

Então, quando alguém lhe pergunta "Qual é a diferença entre UTF-8 e Unicode?", Agora você pode responder com confiança de forma breve e precisa:

UTF-8 (Unicode Transformation Format) e Unicode não podem ser comparados. UTF-8 é uma codificação usada para traduzir números em dados binários. Unicode é um conjunto de caracteres usado para converter caracteres em números.


Além do comentário de Trufa, o Unicode explicitamente não é o UTF-16. Quando eles estavam olhando pela primeira vez para o Unicode, especulou-se que um inteiro de 16 bits poderia ser suficiente para armazenar qualquer código, mas na prática isso acabou não sendo o caso. No entanto, o UTF-16 é outra codificação válida do Unicode - juntamente com as variantes de 8 bits e 32 bits - e acredito que seja a codificação que a Microsoft usa na memória em tempo de execução nos sistemas operacionais derivados do NT.





utf-8