Unicode

Unicode é um padrão mundial de codificação de caracteres. O sistema usa Unicode exclusivamente para manipulação de caracteres e cadeias de caracteres. Para obter uma descrição detalhada de todos os aspectos do Unicode, consulte O Padrão Unicode.

Em comparação com mecanismos mais antigos para lidar com dados de caracteres e cadeias de caracteres, o Unicode simplifica a localização de software e melhora o processamento de texto multilíngue. Usando Unicode para representar dados de caracteres e cadeias de caracteres em seus aplicativos, você pode habilitar recursos universais de troca de dados para marketing global, usando um único arquivo binário para cada código de caractere possível. O Unicode faz o seguinte:

  • Permite que qualquer combinação de caracteres, desenhada de qualquer combinação de scripts e idiomas, coexista em um único documento.
  • Define a semântica para cada caractere.
  • Padroniza o comportamento do script.
  • Fornece um algoritmo padrão para texto bidirecional.
  • Define mapeamentos cruzados para outros padrões.
  • Define várias codificações de seu conjunto de caracteres único: UTF-7, UTF-8, UTF-16 e UTF-32. A conversão de dados entre essas codificações é sem perdas.

O Unicode dá suporte a vários scripts usados por linguagens em todo o mundo e também a um grande número de símbolos técnicos e caracteres especiais usados na publicação. Os scripts com suporte incluem, mas não se limitam a, Latino, Grego, Cirílico, Hebraico, Árabe, Devanágari, Tailandês, Han, Hangul, Hiragana e Katakana. Os idiomas com suporte incluem, mas não se limitam a, alemão, francês, inglês, grego, russo, hebraico, árabe, hindi, tailandês, chinês, coreano e japonês. Atualmente, o Unicode pode representar a grande maioria dos caracteres no uso de computadores modernos em todo o mundo e continua a ser atualizado para torná-lo ainda mais completo.

As funções habilitadas para Unicode são descritas em Convenções para Protótipos de Função. Essas funções usam a codificação UTF-16 (caractere largo), que é a codificação mais comum do Unicode e a usada para codificação Unicode nativa em sistemas operacionais Windows. Cada valor de código tem 16 bits de largura, em contraste com a abordagem de página de código mais antiga para dados de caracteres e cadeias de caracteres, que usa valores de código de 8 bits. O uso de 16 bits permite a codificação direta de 65.536 caracteres. Na verdade, o universo de símbolos usados para transcrever linguagens humanas é ainda maior do que isso, e os pontos de código UTF-16 no intervalo U+D800 a U+DFFF são usados para formar pares substitutos, que constituem codificações de 32 bits de caracteres suplementares. Consulte Substitutos e Caracteres Suplementares para mais discussões.

O conjunto de caracteres Unicode inclui vários caracteres de combinação, como U+0308 (" ̈"), uma combinação de dieresis ou umlaut. O Unicode geralmente pode representar o mesmo glifo em uma forma ''composta'' ou ''decomposed'': por exemplo, a forma composta de "Ä" é o único ponto de código Unicode "Ä" (U+00C4), enquanto sua forma decomposta é "A" + " ̈" (U+0041 U+0308). Unicode não define um formulário composto para cada glifo. Por exemplo, a minúscula vietnamita "o" com circunflexo e til ("ỗ") é representada por U+006f U+0302 U+0303 (o + Circumflex + Tilde). Para obter mais discussões sobre como combinar caracteres e problemas relacionados, consulte Usando a normalização Unicode para representar cadeias de caracteres.

Para compatibilidade com ambientes de 8 e 7 bits, o Unicode também pode ser codificado como UTF-8 e UTF-7, respectivamente. Embora as funções habilitadas para Unicode no Windows usem UTF-16, também é possível trabalhar com dados codificados em UTF-8 ou UTF-7, que têm suporte no Windows como páginas de código de conjunto de caracteres multibyte.

Novos aplicativos do Windows devem usar UTF-16 como sua representação de dados interna. O Windows também fornece amplo suporte para páginas de código e o uso misto no mesmo aplicativo é possível. Até mesmo novos aplicativos baseados em Unicode às vezes precisam trabalhar com páginas de código. Os motivos para isso são discutidos em Páginas de Código.

Um aplicativo pode usar as funções MultiByteToWideChar e WideCharToMultiByte para converter entre cadeias de caracteres com base em páginas de código e cadeias de caracteres Unicode. Embora seus nomes se refiram a "MultiByte", essas funções funcionam igualmente bem com páginas de código SBCS ( conjunto de caracteres de byte único ), DBCS ( conjunto de caracteres de byte duplo ) e MBCS (conjunto de caracteres multibyte).

Normalmente, um aplicativo do Windows deve usar UTF-16 internamente, convertendo apenas como parte de uma "camada fina" na interface que deve usar outro formato. Essa técnica defende contra perda e corrupção de dados. Cada página de código dá suporte a caracteres diferentes, mas nenhum deles dá suporte a todo o espectro de caracteres fornecidos pelo Unicode. A maioria das páginas de código dá suporte a subconjuntos diferentes, codificados de forma diferente. As páginas de código para UTF-8 e UTF-7 são uma exceção, pois dão suporte ao conjunto de caracteres Unicode completo e a conversão entre essas codificações e UTF-16 é sem perdas.

Os dados convertidos diretamente da codificação usada por uma página de código para a codificação usada por outro estão sujeitos a corrupção, pois o mesmo valor de dados em páginas de código diferentes pode codificar um caractere diferente. Mesmo quando seu aplicativo estiver convertendo o mais próximo possível da interface, você deve pensar cuidadosamente sobre o intervalo de dados a serem manipulados.

Os dados convertidos de Unicode em uma página de código estão sujeitos à perda de dados, pois uma determinada página de código pode não ser capaz de representar todos os caracteres usados nesses dados Unicode específicos. Portanto, observe que WideCharToMultiByte poderá perder alguns dados se a página de código de destino não puder representar todos os caracteres na cadeia de caracteres Unicode.

Ao modernizar aplicativos herdados baseados em página de código para usar Unicode, você pode usar funções genéricas e a macro TEXT para manter um único conjunto de fontes a partir das quais compilar duas versões do seu aplicativo. Uma versão dá suporte a Unicode e a outra funciona com páginas de código do Windows. Usando esse mecanismo, você pode converter até mesmo aplicativos muito grandes de páginas de código do Windows em Unicode, mantendo fontes de aplicativo que podem ser compiladas, criadas e testadas em todas as fases da conversão. Para obter mais informações, consulte Convenções para protótipos de função.

Caracteres Unicode e cadeias de caracteres usam tipos de dados distintos daqueles para caracteres e cadeias de caracteres baseados em página de código. Juntamente com uma série de macros e convenções de nomenclatura, essa distinção minimiza a chance de misturar acidentalmente os dois tipos de dados de caractere. Ele facilita a verificação de tipo do compilador para garantir que apenas valores de parâmetro Unicode sejam usados com funções que esperam cadeias de caracteres Unicode.

Conjuntos de caracteres

Classificação

Caracteres substitutos e suplementares

Usando a normalização unicode para representar cadeias de caracteres