Compartilhar via


Substitutos e caracteres suplementares

Os aplicativos do Windows normalmente usam o UTF-16 para representar dados de caracteres Unicode. O uso de 16 bits permite uma representação direta de 65.536 caracteres exclusivos, mas esse BMP (Plano Multilíngue Básico) não é suficiente para cobrir todos os símbolos usados em linguagens humanas. O Unicode versão 4.1 inclui mais de 97.000 caracteres, com mais de 70.000 caracteres apenas para chineses.

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á 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 complementares".

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 complementares, substitutos e pares substitutos, consulte oPadrão Unicode.

Nota

O Windows 2000 apresenta suporte para entrada básica, saída e classificação simples de caracteres complementares. No entanto, nem todos os componentes do sistema são compatíveis com caracteres complementares.

 

O sistema operacional dá suporte a caracteres complementares das seguintes maneiras:

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

Diretrizes gerais para desenvolvimento de software usando caracteres complementares

O UTF-16 manipula caracteres suplementares como pares alternativos. O sistema operacional processa um par alternativo da mesma forma que processa marcas de não espaçamento. Em 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 substitutos em cadeias de caracteres UTF-16. Estes são IS_HIGH_SURROGATE, IS_LOW_SURROGATEe IS_SURROGATE_PAIR.

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

Aplicativos que implementam seu próprio suporte de edição trabalhando posições de glifo de forma 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 de 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 complementares.

Como o mecanismo alternativo para representar caracteres suplementares está 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. Assim, o aplicativo pode detectar um par substituto fazendo uma verificação de intervalo simples. Se encontrar um valor UTF-16 no intervalo inferior ou superior, ele deverá acompanhar para trás ou para frente uma largura de 16 bits para obter o restante do caractere. Ao escrever seu aplicativo, tenha em mente que CharNext e CharPrev mover por pontos de código de 16 bits, não por pares substitutos.

Nota

Os pontos de código alternativos 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 posteriores habilitam caracteres complementares por padrão. Se você fornecer uma fonte e um pacote IME que exija caracteres complementares, 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