it-swarm.dev

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

Considerar:

Alt text

É verdade que unicode=utf16?

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

177
ollydbg

a maioria dos editores suporta 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 de 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 planejado 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 à 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.

157
bobince

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

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 para 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.

527
vikas devde

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 Mínimo Absoluto Todo Desenvolvedor de Software Absolutamente, Positivamente Deve Saber Sobre Unicode e Conjuntos de Caracteres (Sem Desculpas!) link.

28
Matt Ball

Há muito mal-entendido sendo exibido aqui. Unicode não é an codificação, mas o padrão Unicode é dedicado principalmente à codificação de qualquer maneira.

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 era não 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).

15
Jerry Coffin

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

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

7
Mark Ransom

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/

4
Trufa

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.

3
Tommy

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!

2
mrehan

É estranho. Unicode é um padrão, não uma codificação. Como é possível especificar o endianness, acho que é efetivamente UTF-16 ou talvez 32.

De onde este menu oferece?

1
MatTheCat