Escrita, Mapeamento e Classificação de caracteres EUDC e PUA

Os aplicativos gravam caracteres definidos pelo usuário final (EUDCs) e caracteres de área de uso privado (PUA) na tela ou na impressora da mesma forma que 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 o EUDC estiver habilitado. Para obter mais informações, consulte End-User_Defined e Caracteres da Área de Uso Privado.

Ao escrever EUDCs ou caracteres 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 caractere EUDC ou PUA integrada, a função recuperará informações de caracteres dessa fonte. Se a fonte selecionada for uma fonte TrueType 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 Unicode TrueType 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 caractere 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 se não houver 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 na API Unicode. No entanto, para suportar certos 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 na PUA para a sua contraparte EUDC, se esse mapeamento existir e se o ponto de código não tiver um mapeamento não-PUA válido em 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ódigos EUDC para que o mapeamento para o intervalo EUDC ocorra. Se a página de código não contiver um intervalo de códigos EUDC, a função recuperará o caractere padrão para todos os caracteres na API Unicode.

MultiByteToWideChar e WideCharToMultiByte não garantem o mapeamento de ida e volta. Em outras palavras, é possível começar com uma sequência multibyte específica contendo EUDCs, mapear a sequência para Unicode usando MultiByteToWideChar e depois mapear novamente para o DBCS original com WideCharToMultiByte, resultando em algo que pode não ser idêntico à sequência 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 página de código apropriada, a área EUDC e a API 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 a partir de uma página de código, mapeá-lo para Unicode com MultiByteToWideChare mapeia para um DBCS diferente com WideCharToMultiByte, não há 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 contenham EUDCs usando a versão ANSI da função CompareString . A função efetivamente mapeia os caracteres para Unicode antes de comparar os valores dos caracteres. Os aplicativos podem criar uma chave de classificação para a cadeia de caracteres usando a versão ANSI da funçãoLCMapStringe o valor LCMAP_SORTKEY. Esta função efetivamente mapeia caracteres para Unicode primeiro. Todos os caracteres na PUA são classificados depois de todos os outros caracteres Unicode. Dentro da área, os caracteres são ordenados em ordem numérica. Se um aplicativo tentar recuperar informações CTYPE para um EUDC usando a função GetStringTypeA, a função recuperará NULL para cada caractere.

Usando Unicode e conjuntos de caracteres