Pergunta

Eu consegui principalmente ignorar todas as coisas caráter este 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? Quais são os tipos que eu deveria estar usando (eu uso tanto .Net e C / C ++, e eu preciso esta resposta tanto para Unix e Windows).

Foi útil?

Solução

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

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

Outras dicas

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

<> UTF8 (UCS) fortes usa 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 seus dois mais bits significativos.
  • A UTF-8 fluxo contém nem o byte FE nem FF. Isso garante que a UTF-8 fluxo nunca olha como um UTF-16 transmitir começando com L + 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 a 4 bytes para cada símbolo.

UTF32 (UCS4)

usa 4 bytes sempre para cada símbolo.

de char 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 Ambos do STL e std :: string não são projetados para codificações de caracteres de comprimento variável, 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 projetos como libxml

Outros grandes recursos na codificação de caracteres:

sabedoria recebida sugere que o artigo acidentes de Spolsky 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 da codificação de caracteres formas e esquemas para Unicode.

As várias normas UTF são maneiras para codificar "pontos de código". A codepoint é o índice no conjunto charater Unicode.

Outra codificação é UCS2 que é allways 16bit, e, portanto, não suporta a gama Unicode completo.

É bom saber também que um codepoint não é igual a um personagem. Por exemplo, um personagem, como um pode ser representado tanto como um ponto de código ou como dois pontos de código Um para a uma e outra para o anel.

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

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 capaz som biblioteca de combinar glifos de diversas fontes dedicadas a subconjuntos do padrão Unicode.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top