Compartilhar via


Escrevendo, mapeando e classificando caracteres EUDC e PUA

Os aplicativos gravam caracteres definidos pelo usuário final (EUDCs) e caracteres PUA (área de uso privado) na tela ou impressora, assim como escrevem outros caracteres, usando funções de saída como TextOut e ExtTextOut. Essas funções recuperam automaticamente informações de caracteres de fontes de caracteres EUDC ou PUA se EUDC estiver habilitado. Para obter mais informações, consulte Caracteres de área de uso privado e de User_Defined final.

Ao gravar caracteres EUDCs ou PUA, a operação da função de saída de texto depende da fonte selecionada no momento. Se a fonte selecionada for uma fonte de caracteres EUDC ou PUA integrada, a função recuperará informações de caracteres dessa fonte. Se a fonte selecionada for uma fonte TrueType de conjunto de caracteres de byte duplo (DBCS) que tenha uma fonte EUDC separada associada, a função recuperará informações da fonte EUDC especificada. Da mesma forma, se a fonte selecionada for uma fonte TrueType Unicode que tenha uma fonte de caractere PUA separada associada, a função recuperará informações da fonte de caractere PUA. Se a fonte selecionada não tiver uma fonte de caracteres EUDC ou PUA associada, a função recuperará informações da fonte EUDC padrão do sistema. Se o caractere não estiver na fonte EUDC padrão do sistema ou não houver nenhuma fonte EUDC padrão do sistema, a função gravará o caractere padrão definido pela fonte selecionada.

Os aplicativos podem mapear EUDCs de e para Unicode usando as funções MultiByteToWideChar e WideCharToMultiByte . A função MultiByteToWideChar mapeia a maioria dos EUDCs para caracteres no PUA Unicode. No entanto, para dar suporte a determinados padrões nacionais ou regionais, alguns EUDCs podem ser mapeados para pontos de código Unicode não PUA. A função WideCharToMultiByte mapeia um caractere no PUA para seu equivalente EUDC, se esse mapeamento existir e se o ponto de código não tiver um mapeamento não PUA válido no Unicode. Nem todas as páginas de código têm um intervalo EUDC. A página de código especificada em uma chamada para WideCharToMultiByte deve conter um intervalo de código EUDC para que o mapeamento para o intervalo EUDC ocorra. Se a página de código não contiver um intervalo de código EUDC, a função recuperará o caractere padrão para qualquer caractere no PUA Unicode.

MultiByteToWideChar e WideCharToMultiByte não garantem o mapeamento de ida e volta. Em outras palavras, é possível começar com uma cadeia de caracteres multibyte específica contendo EUDCs, mapear a cadeia de caracteres para Unicode com MultiByteToWideChar e mapeá-la de volta para o DBCS original com WideCharToMultiByte e acabar com um resultado que não é idêntico à cadeia de caracteres original. Os aplicativos que dependem do mapeamento de EUDCs para Unicode devem garantir que todos os caracteres necessários possam fazer uma viagem de ida e volta entre a área EUDC da página de código apropriada e a PUA Unicode.

Os aplicativos não devem tentar mapear EUDCs de uma página de código para outra. Se um aplicativo começar com um EUDC de uma página de código, mapeá-lo para Unicode com MultiByteToWideChar e mapear para um DBCS diferente com WideCharToMultiByte, não haverá garantias sobre os resultados. O caractere original pode ser mapeado para um EUDC diferente na página de código de destino ou pode ser mapeado como um caractere indefinido. Da mesma forma, mapear uma cadeia de caracteres Unicode para uma página de código que tenha um intervalo EUDC pode ter resultados não intencionais. Se a cadeia de caracteres Unicode contiver um ponto de código PUA, é possível que o ponto de código seja mapeado para um EUDC que não represente o mesmo caractere.

Os aplicativos podem comparar cadeias de caracteres DBCS que contêm EUDCs usando a versão ANSI da função CompareString . A função mapeia efetivamente os caracteres para Unicode antes de comparar valores de caractere. Os aplicativos podem criar uma chave de classificação para a cadeia de caracteres usando a versão ANSI da função LCMapString e o valor LCMAP_SORTKEY. Essa função mapeia efetivamente os caracteres para Unicode primeiro. Todos os caracteres no PUA são classificados após todos os outros caracteres Unicode. Dentro da área, os caracteres são classificados em ordem numérica. Se um aplicativo tentar recuperar informações de CTYPE para um EUDC usando a função GetStringTypeA , a função recuperará NULL para cada caractere.

Usando Conjuntos de Caracteres e Unicode