Caracteres substitutos e suplementares

Os aplicativos do Windows normalmente usam UTF-16 para representar dados de caractere Unicode . O uso de 16 bits permite a representação direta de 65.536 caracteres exclusivos, mas este Plano Multilíngue Básico (BMP) não é suficiente para cobrir todos os símbolos usados em linguagens humanas. A versão Unicode 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 com o mesmo tamanho do 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á a Unicode o potencial de definir 1.114.112 caracteres (ou seja, 216 * 17 caracteres) dentro do intervalo de ponto 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 alternativo, o UTF-16 pode dar suporte a todos os 1.114.112 caracteres Unicode potenciais. Para obter mais detalhes sobre caracteres suplementares, substitutos e pares substitutos, consulte O Padrão Unicode.

Observação

O Windows 2000 apresenta 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 dá suporte a caracteres suplementares das seguintes maneiras:

  • O formato 12 da tabela cmap de fonte OpenType dá suporte diretamente ao código de caracteres de 4 bytes. Para obter mais informações, consulte a especificação de fonte OpenType.
  • O Windows dá suporte a IMEs (editores de método de entrada) habilitados para substitutos.
  • A API GDI do Windows dá suporte ao formato 12 tabelas cmap em fontes para que os substitutos possam ser exibidos corretamente.
  • A API Uniscribe dá suporte a caracteres suplementares.
  • Os controles do Windows, incluindo Editar e Edição Avançada, dão suporte a caracteres suplementares.
  • O mecanismo HTML dá 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 dá suporte a caracteres suplementares.

Diretrizes gerais para desenvolvimento de software usando caracteres suplementares

UTF-16 manipula caracteres suplementares como pares alternativos. O sistema operacional processa um par alternativo da mesma forma que processa marcas sem espaçamento. No tempo de 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 substitutos e pares alternativos em cadeias de caracteres UTF-16. São IS_HIGH_SURROGATE, IS_LOW_SURROGATE e IS_SURROGATE_PAIR.

Os aplicativos dão suporte automaticamente a caracteres suplementares se dão suporte a Unicode e usam controles do sistema e funções de API padrão, como ExtTextOut e DrawText. Portanto, se o aplicativo usar controles padrão do sistema ou usar chamadas gerais do tipo ExtTextOut para exibir, os caracteres suplementares deverão funcionar sem nenhuma codificação especial.

Os aplicativos que implementam seu próprio suporte à edição trabalhando em posições de glifo de maneira personalizada podem usar Uniscribe para todo o processamento de texto. O Uniscribe tem funções separadas para lidar com o processamento de script complexo, como exibição de texto, teste de clique e movimento do cursor. Um aplicativo deve chamar as funções Uniscribe especificamente para obter esses recursos avançados. Observe que os aplicativos que usam as funções Uniscribe são totalmente multilíngues, mas isso impõe uma penalidade de desempenho. Portanto, alguns aplicativos devem fazer seu próprio processamento de caracteres suplementares.

Como o mecanismo substituto para representar caracteres suplementares é bem definido, seu aplicativo pode incluir código para lidar com o processamento de texto alternativo UTF-16. Quando o aplicativo encontra um valor UTF-16 separado do intervalo alternativo reservado inferior (um substituto baixo) ou do intervalo alternativo reservado superior (um substituto alto), o valor deve ser metade de um par substituto. Portanto, o aplicativo pode detectar um par alternativo fazendo uma verificação de intervalo simples. Se encontrar um valor UTF-16 no intervalo inferior ou superior, ele deverá rastrear uma largura de 16 bits para trás ou para frente para obter o restante do caractere. Ao escrever seu aplicativo, tenha em mente que CharNext e CharPrev são movidos por pontos de código de 16 bits, não por pares alternativos.

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 têm suporte. O comportamento deles é indefinido.

 

Se você estiver desenvolvendo uma fonte ou um provedor de IME, observe que os sistemas operacionais pré-Windows XP desabilitam o suporte a caracteres suplementares por padrão. O Windows XP e posterior 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]

Conjuntos de caracteres