Compartir a través de


Escritura, asignación y ordenación de caracteres EUDC y PUA

Las aplicaciones escriben caracteres definidos por el usuario final (EUDC) y caracteres de área de uso privado (PUA) en la pantalla o impresora al igual que escriben otros caracteres, mediante funciones de salida como TextOut y ExtTextOut. Estas funciones recuperan automáticamente la información de caracteres de las fuentes de caracteres EUDC o PUA si EUDC está habilitado. Para obtener más información, vea End-User_Defined y Caracteres de área de uso privado.

Al escribir caracteres EUDC o PUA, el funcionamiento de la función de salida de texto depende de la fuente seleccionada actualmente. Si la fuente seleccionada es una fuente de caracteres EUDC o PUA integrada, la función recupera información de caracteres de esa fuente. Si la fuente seleccionada es una fuente TrueType de juego de caracteres de doble byte (DBCS) que tiene una fuente EUDC independiente asociada, la función recupera información de la fuente EUDC especificada. Del mismo modo, si la fuente seleccionada es una fuente TrueType Unicode que tiene una fuente de caracteres PUA independiente asociada, la función recupera información de la fuente de caracteres PUA. Si la fuente seleccionada no tiene una fuente de caracteres EUDC o PUA asociada, la función recupera información de la fuente EUDC predeterminada del sistema. Si el carácter no está en la fuente EUDC predeterminada del sistema o no hay ninguna fuente EUDC predeterminada del sistema, la función escribe el carácter predeterminado definido por la fuente seleccionada.

Las aplicaciones pueden asignar EUDC hacia y desde Unicode mediante las funciones MultiByteToWideChar y WideCharToMultiByte . La función MultiByteToWideChar asigna la mayoría de los EUDCs a los caracteres de la PUA Unicode. Sin embargo, para admitir determinados estándares nacionales o regionales, algunos EUDC se pueden asignar a puntos de código Unicode que no son PUA. La función WideCharToMultiByte asigna un carácter en la PUA a su homólogo EUDC, si existe dicha asignación y si el punto de código no tiene una asignación no PUA válida en Unicode. No todas las páginas de códigos tienen un intervalo EUDC. La página de códigos especificada en una llamada a WideCharToMultiByte debe contener un intervalo de código EUDC para que se produzca la asignación al intervalo EUDC. Si la página de códigos no contiene un intervalo de código EUDC, la función recupera el carácter predeterminado para los caracteres de la PUA Unicode.

MultiByteToWideChar y WideCharToMultiByte no garantizan la asignación de ida y vuelta. En otras palabras, es posible empezar con una cadena multibyte determinada que contiene EUDC, asignar la cadena a Unicode con MultiByteToWideChar y asignarla de nuevo al DBCS original con WideCharToMultiByte y terminar con un resultado que no es idéntico a la cadena original. Las aplicaciones que se basan en la asignación de EUDC a Unicode deben asegurarse de que todos los caracteres necesarios puedan realizar un recorrido de ida y vuelta entre el área EUDC de la página de códigos adecuada y la PUA Unicode.

Las aplicaciones no deben intentar asignar EUDC de una página de códigos a otra. Si una aplicación comienza con un EUDC desde una página de códigos, la asigna a Unicode con MultiByteToWideChar y se asigna a un DBCS diferente con WideCharToMultiByte, no hay garantías sobre los resultados. El carácter original se puede asignar a un EUDC diferente en la página de códigos de destino, o puede asignarse como un carácter no definido. Del mismo modo, la asignación de una cadena Unicode a una página de códigos que tiene un intervalo EUDC puede tener resultados no deseados. Si la cadena Unicode contiene un punto de código PUA, es posible que el punto de código se asigne a un EUDC que no represente el mismo carácter.

Las aplicaciones pueden comparar cadenas DBCS que contienen EUDC mediante la versión ANSI de la función CompareString . La función asigna eficazmente los caracteres a Unicode antes de comparar los valores de caracteres. Las aplicaciones pueden crear una clave de ordenación para la cadena mediante la versión ANSI de la función LCMapString y el valor de LCMAP_SORTKEY. Esta función asigna caracteres a Unicode primero. Todos los caracteres de la PUA se ordenan después de todos los demás caracteres Unicode. Dentro del área, los caracteres se ordenan en orden numérico. Si una aplicación intenta recuperar información de CTYPE para un EUDC mediante la función GetStringTypeA , la función recupera NULL para cada carácter.

Usar Unicode y juegos de caracteres