Suplentes y caracteres suplementarios

Normalmente, las aplicaciones windows usan UTF-16 para representar datos de caracteres Unicode . El uso de 16 bits permite la representación directa de 65 536 caracteres únicos, pero este plano multilingüe básico (BMP) no es suficiente para cubrir todos los símbolos usados en idiomas humanos. La versión 4.1 de Unicode incluye más de 97 000 caracteres, con más de 70 000 caracteres solo para chino.

El estándar Unicode ha establecido 16 "planos" adicionales de caracteres, cada uno del mismo tamaño que el BMP. Naturalmente, la mayoría de los puntos de código más allá del BMP aún no tienen caracteres asignados, pero la definición de los planos proporciona a Unicode la posibilidad de definir 114 112 caracteres (es decir, 216 * 17 caracteres) dentro del intervalo de puntos de código U+0000 a U+10FFFF. Para que UTF-16 represente este conjunto de caracteres mayor, el estándar Unicode define "caracteres complementarios".

Acerca de los caracteres complementarios

Un carácter complementario es un carácter situado más allá del BMP y un "suplente" es un valor de código UTF-16. En el caso de UTF-16, se requiere un "par suplente" para representar un único carácter complementario. El primer suplente (alto) es un valor de código de 16 bits en el intervalo U+D800 a U+DBFF. El segundo suplente (bajo) es un valor de código de 16 bits en el intervalo U+DC00 a U+DFFF. Con el mecanismo suplente, UTF-16 puede admitir todos los 1114 112 caracteres Unicode posibles. Para obtener más información sobre los caracteres complementarios, los suplentes y los pares suplentes, consulte El estándar Unicode.

Nota:

Windows 2000 presenta compatibilidad con la entrada básica, la salida y la ordenación sencilla de caracteres adicionales. Sin embargo, no todos los componentes del sistema son compatibles con caracteres adicionales.

 

El sistema operativo admite caracteres adicionales de las siguientes maneras:

Directrices generales para el desarrollo de software con caracteres complementarios

UTF-16 controla los caracteres adicionales como pares suplentes. El sistema operativo procesa un par suplente de forma similar a la forma en que procesa marcas sin espaciado. En el momento de la presentación, el par suplente se muestra como un glifo mediante Uniscribe, según lo indicado por el Estándar Unicode.

Windows Vista presenta tres macros nuevas para ayudar a identificar suplentes y pares suplentes en cadenas UTF-16. Se trata de IS_HIGH_SURROGATE, IS_LOW_SURROGATE y IS_SURROGATE_PAIR.

Las aplicaciones admiten automáticamente caracteres adicionales si admiten Unicode y usan controles del sistema y funciones de API estándar, como ExtTextOut y DrawText. Por lo tanto, si la aplicación usa controles del sistema estándar o usa llamadas generales de tipo ExtTextOut para mostrar, los caracteres adicionales deben funcionar sin ninguna codificación especial.

Las aplicaciones que implementan su propia compatibilidad de edición al trabajar con posiciones de glifo de forma personalizada pueden usar Uniscribe para todo el procesamiento de texto. Uniscribe tiene funciones independientes para tratar el procesamiento complejo de scripts, como la visualización de texto, las pruebas de posicionamiento y el movimiento del cursor. Una aplicación debe llamar a las funciones Uniscribe específicamente para obtener estas características avanzadas. Tenga en cuenta que las aplicaciones que usan las funciones Uniscribe son totalmente multilingües, pero esto impone una penalización de rendimiento. Por lo tanto, algunas aplicaciones deben realizar su propio procesamiento de caracteres complementarios.

Dado que el mecanismo suplente para representar caracteres complementarios está bien definido, la aplicación puede incluir código para controlar el procesamiento de texto suplente UTF-16. Cuando la aplicación encuentra un valor UTF-16 separado del intervalo suplente reservado inferior (un suplente bajo) o el intervalo suplente reservado superior (un suplente alto), el valor debe ser la mitad de un par suplente suplente. Por lo tanto, la aplicación puede detectar un par suplente realizando una comprobación de rango simple. Si encuentra un valor UTF-16 en el rango inferior o superior, debe realizar un seguimiento del ancho hacia atrás o hacia delante de un ancho de 16 bits para obtener el resto del carácter. Al escribir la aplicación, tenga en cuenta que CharNext y CharPrev se mueven por puntos de código de 16 bits, no por pares suplentes.

Nota:

Los puntos de código suplente independientes tienen un suplente alto sin un suplente bajo adyacente o viceversa. Estos puntos de código no son válidos y no se admiten. Su comportamiento no está definido.

 

Si está desarrollando una fuente o un proveedor IME, tenga en cuenta que los sistemas operativos anteriores a Windows XP deshabilitan la compatibilidad con caracteres complementarios de forma predeterminada. Windows XP y versiones posteriores habilitan caracteres adicionales de forma predeterminada. Si proporciona una fuente y un paquete IME que requiere caracteres adicionales, la aplicación debe establecer los siguientes valores del 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]

Juegos de caracteres