Substitutos e Caracteres Suplementares
Os aplicativos do Windows normalmente usam UTF-16 para representar Unicode dados de caracteres. O uso de 16 bits permite a representação direta de 65.536 caracteres únicos, mas este Plano Multilingue Básico (BMP) não é suficiente para cobrir todos os símbolos usados em línguas humanas. Unicode versão 4.1 inclui mais de 97.000 caracteres, com mais de 70.000 caracteres apenas para chinês.
O padrão Unicode estabeleceu 16 "planos" adicionais de caracteres, cada um do mesmo tamanho que o BMP. Naturalmente, a maioria dos pontos de código além do BMP ainda não tem caracteres atribuídos a eles, mas a definição dos planos dá ao Unicode o potencial de definir 1.114.112 caracteres (ou seja, 216 * 17 caracteres) dentro do intervalo de pontos de código U+0000 a U+10FFFF. Para UTF-16 representar esse conjunto maior de caracteres, o padrão Unicode define "caracteres suplementares".
Sobre caracteres suplementares
Um caractere suplementar é um caractere localizado além do BMP, e um "substituto" é um valor de código UTF-16. Para UTF-16, um "par substituto" é necessário para representar um único caractere suplementar. O primeiro substituto (alto) é um valor de código de 16 bits no intervalo U+D800 a U+DBFF. O segundo substituto (baixo) é um valor de código de 16 bits no intervalo U+DC00 a U+DFFF. Usando o mecanismo substituto, UTF-16 pode suportar todos os 1.114.112 caracteres Unicode potenciais. Para obter mais detalhes sobre caracteres suplementares, substitutos e pares substitutos, consulte The Unicode Standard.
Observação
O Windows 2000 introduz suporte para entrada, saída e classificação simples de caracteres suplementares. No entanto, nem todos os componentes do sistema são compatíveis com caracteres suplementares.
O sistema operacional suporta caracteres suplementares das seguintes maneiras:
- O formato 12 da tabela cmap de fontes OpenType suporta diretamente o código de caracteres de 4 bytes. Para obter mais informações, consulte a especificação de fonte OpenType.
- O Windows oferece suporte a IMEs (editores de método de entrada) de habilitados para substituto.
- O Windows GDI API suporta o formato 12 tabelas cmap em fontes para que os substitutos possam ser exibidos corretamente.
- A API Uniscribe suporta caracteres suplementares.
- controles do Windows, incluindo Edit e Rich Edit, suportam caracteres suplementares.
- O mecanismo HTML oferece suporte a páginas HTML que incluem caracteres suplementares para exibição, edição (por meio do Outlook Express) e envio de formulários.
- A tabela de classificação do sistema operacional suporta caracteres suplementares.
Diretrizes gerais para o desenvolvimento de software usando caracteres suplementares
UTF-16 lida com caracteres suplementares como pares substitutos. O sistema operacional processa um par substituto de forma semelhante à maneira como processa marcas sem espaçamento. No momento da exibição, o par substituto é exibido como um glifo por meio de Uniscribe, conforme prescrito pelo padrão Unicode.
O Windows Vista apresenta três novas macros para ajudar a identificar pares substitutos e substitutos em cadeias de caracteres UTF-16. Estes são IS_HIGH_SURROGATE, IS_LOW_SURROGATEe IS_SURROGATE_PAIR.
Os aplicativos suportam automaticamente caracteres suplementares se suportarem Unicode e usarem controles do sistema e funções de API padrão, como ExtTextOut e DrawText. Assim, se o seu aplicativo usa controles de sistema padrão ou usa chamadas gerais do tipo ExtTextOutpara exibir, os caracteres suplementares devem funcionar sem qualquer codificação especial.
Aplicativos que implementam seu próprio suporte de edição trabalhando posições de glifo de forma personalizada podem usar o Uniscribe para todo o processamento de texto. O Uniscribe tem funções separadas para lidar com o processamento de scripts complexos, como exibição de texto, teste de acerto e movimento do cursor. Um aplicativo deve chamar as funções Uniscribe especificamente para obter esses recursos avançados. Note que as aplicações que utilizam as funções Uniscribe são totalmente multilingues, mas isso impõe uma penalização de desempenho. Assim, alguns pedidos devem fazer o seu próprio processamento de caracteres suplementares.
Como o mecanismo substituto para representar caracteres suplementares é bem definido, seu aplicativo pode incluir código para manipular o processamento de texto substituto UTF-16. Quando o aplicativo encontra um valor UTF-16 separado do intervalo substituto reservado inferior (um substituto baixo) ou do intervalo substituto reservado superior (um substituto alto), o valor deve ser metade de um par substituto. Assim, o aplicativo pode detetar um par substituto fazendo uma verificação de alcance simples. Se ele encontrar um valor UTF-16 na faixa inferior ou superior, ele deve rastrear para trás ou para frente uma largura de 16 bits para obter o resto do caractere. Ao escrever seu aplicativo, lembre-se de que CharNext e CharPrev se movem por pontos de código de 16 bits, não por pares substitutos.
Observação
Os pontos de código substituto autônomos têm um substituto alto sem um substituto baixo adjacente, ou vice-versa. Esses pontos de código são inválidos e não são suportados. O seu comportamento é indefinido.
Se você estiver desenvolvendo uma fonte ou um provedor de IME, observe que os sistemas operacionais anteriores ao Windows XP desabilitam o suporte a caracteres suplementares por padrão. O Windows XP e versões posteriores habilitam caracteres suplementares por padrão. Se você fornecer uma fonte e um pacote IME que exija caracteres suplementares, seu aplicativo deverá definir os seguintes valores do Registro:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\LanguagePack]
SURROGATE=(REG_DWORD)0x00000002
[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\International\Scripts\42]
IEFixedFontName=[Surrogate Font Face Name]
IEPropFontName=[Surrogate Font Face Name]
Tópicos relacionados