UTF8 vs. UTF16 vs. char * vs. quê? Alguém explicar essa bagunça para mim!

votos
32

Eu consegui ignorar principalmente todo este material caráter multi-byte, mas agora eu preciso fazer algum trabalho UI e eu sei que a minha ignorância nesta área vai apanhar com me! Alguém pode explicar em alguns parágrafos ou menos exatamente o que eu preciso saber para que eu possa localizar minhas aplicações? Que tipos eu deveria estar usando (eu uso tanto .Net e C / C ++, e eu preciso esta resposta tanto para Unix e Windows).

Publicado 05/10/2008 em 16:22
fonte usuário
Em outras línguas...                            


5 respostas

votos
76

Confira Joel Spolsky de O desenvolvedor Absolute Minimum cada Software Absolutamente, Positivamente Precisa Saber Sobre Unicode e Conjuntos de caracteres (Sem Desculpas!)

EDIT 20140523 : Além disso, assistir caracteres, símbolos e o Milagre Unicode por Tom Scott no YouTube - é apenas menos de dez minutos, e uma explicação maravilhosa do brilhante 'hack' que é UTF-8

Respondeu 05/10/2008 em 16:25
fonte usuário

votos
25

A codificação de caracteres consiste em uma seqüência de códigos que se parecem cada um símbolo a partir de um determinado conjunto de caracteres. Consulte este bom artigo sobre Wikipedia sobre codificação de caracteres .

UTF-8 (UCS) utiliza de 1 a 4 bytes para cada símbolo. Wikipedia dá um bom resumo de como o resumo multi-byte funciona:

  • O bit mais significativo de um caractere de byte único é sempre 0.
  • Os bits mais significativos do primeiro byte de uma sequência de bytes múltiplos determinar o comprimento da sequência. Estes bits mais significativos são 110 para sequências de dois bytes; 1110 para sequências de três bytes, e assim por diante.
  • Os bytes restantes numa sequência de multi-byte tem 10 como os dois bits mais significativos.
  • Um fluxo UTF-8 não contém nem o byte FE nem FF. Isso garante que um fluxo UTF-8 não se parece com um fluxo UTF-16 começando com U + FEFF (marca de ordem de bytes)

A página também mostra uma grande comparação entre as vantagens e desvantagens de cada tipo de codificação de caracteres.

UTF16 (UCS2)

Usa 2 bytes para 4 bytes para cada símbolo.

UTF32 (UCS4)

usa 4 bytes sempre para cada símbolo.

caractere significa apenas que um byte de dados e não é uma codificação real. Não é análogo ao UTF-8 / UTF16 / ASCII. Um ponteiro de char * pode referir-se a qualquer tipo de dados e qualquer codificação.

STL:

std :: wstring tanto do STL e std :: string não são projetados para de comprimento variável codificação de caracteres como UTF-8 e UTF-16.

Como implementar:

Dê uma olhada na biblioteca iconv. iconv é uma biblioteca de conversão de codificação de caracteres poderosa usada por tais projectos como libxml (analisador XML C do Gnome)

Outros grandes recursos na codificação de caracteres:

Respondeu 05/10/2008 em 16:28
fonte usuário

votos
4

Os vários padrões de UTF são maneiras para codificar "pontos de código". Um ponto de código é o índice no conjunto charater Unicode.

Outra codificação é UCS2 que é hair 16bit, e, assim, não suporte a gama completa de Unicode.

É bom saber também que um codepoint não é igual a um personagem. Por exemplo, um carácter, tal como um pode ser representada quer como um ponto de código ou como dois pontos de código uma para a um e um para o anel.

Comparando duas strings unicode, portanto, requer a normalização para obter a representação canônica antes de comparação.

Respondeu 05/10/2008 em 16:47
fonte usuário

votos
1

Há também o problema com as fontes. Há duas maneiras de lidar com as fontes. Ou você usar uma fonte gigantesco com glifos para todos os caracteres Unicode que você precisa (eu acho que as versões recentes do Windows vem com uma ou duas dessas fontes). Ou você usa biblioteca de som capaz de combinar glifos a partir de várias fontes dedicadas a subconjuntos do padrão Unicode.

Respondeu 05/10/2008 em 16:50
fonte usuário

votos
12

Sabedoria recebida sugere que o artigo de Spolsky perde um par de pontos importantes.

Este artigo é recomendado como sendo mais completo: O Unicode® Standard: uma introdução técnica

Este artigo é também uma boa introdução: Unicode Basics

Este último, em particular, dá uma visão geral das formas de codificação de caracteres e esquemas para Unicode.

Respondeu 05/10/2008 em 18:07
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more