Páginas de códigos
La mayoría de las aplicaciones escritas actualmente controlan los datos de caracteres principalmente como Unicode, mediante la codificación UTF-16. Sin embargo, muchas aplicaciones heredadas siguen usando juegos de caracteres basados en páginas de códigos. Incluso las nuevas aplicaciones a veces tienen que trabajar con páginas de códigos, a menudo por una de las siguientes razones:
- Para comunicarse con aplicaciones heredadas.
- Para comunicarse con servidores de correo y noticias más antiguos, lo que podría no admitir siempre Unicode.
- Para comunicarse con la consola de Windows con fines heredados. (La consola admite Unicode, pero es posible que algunas herramientas de aplicación de línea de comandos heredadas no lo sean).
Nota
Las nuevas aplicaciones de Windows deben usar Unicode para evitar las incoherencias de páginas de códigos variadas y para facilitar la localización.
Cada página de códigos se representa mediante un identificador de página de códigos, por ejemplo, 1252 y se controla mediante las funciones de API Unicode y juego de caracteres. Para obtener una lista de los identificadores de página de códigos admitidos, consulte Identificadores de página de códigos. La referencia "Páginas de códigos" del Centro para desarrolladores global de Microsoft Go proporciona descripciones completas de muchas páginas de códigos.
Las páginas de códigos de Windows, denominadas normalmente "páginas de códigos ANSI", son páginas de códigos para las que los valores que no son ASCII (valores mayores que 127) representan caracteres internacionales. Estas páginas de códigos se usan de forma nativa en Windows Me y también están disponibles en Windows NT y versiones posteriores.
Nota
Originalmente, la página de códigos de Windows 1252, la página de códigos que se usa habitualmente para inglés y otros idiomas europeos occidentales, se basaba en un borrador del American National Standards Institute (ANSI). Ese borrador finalmente se convirtió en ISO 8859-1, pero la página de códigos de Windows 1252 se implementó antes de que el estándar se convirtiera en final, y no es exactamente igual que ISO 8859-1.
Muchas funciones de la API de Windows tienen versiones "A" (ANSI) y "W" (wide, Unicode). La versión "A" controla el texto basado en páginas de códigos de Windows, mientras que la versión "W" controla el texto Unicode. Consulte Tipos de datos de Windows para cadenas y convenciones para prototipos de función.
Las páginas de códigos de Windows también se conocen a veces como "páginas de códigos activas" o "páginas de códigos activas del sistema". Un sistema operativo Windows siempre tiene una página de códigos de Windows activa actualmente. Todas las versiones ANSI de las funciones de API usan la página de códigos activa actualmente.
Las páginas de códigos del fabricante de equipos originales (OEM) son páginas de códigos para las que los valores que no son ASCII representan caracteres de dibujo y puntuación de línea. Estas páginas de códigos se usaron originalmente para MS-DOS y todavía se usan para las aplicaciones de consola. También se usan para los nombres de archivo no extendidos en los sistemas de archivos FAT12, FAT16 y FAT32, como se describe en Juegos de caracteres usados en nombres de archivo. La página de códigos oem habitual para inglés es la página de códigos 437.
Para las páginas de códigos de Windows y las páginas de códigos OEM, los valores de código 0x00 a través de 0x7F corresponden al juego de caracteres ASCII de 7 bits. Los valores de código 0x00 a través de 0x19 y 0x7F siempre representan caracteres de control estandarizados y 0x20 a través de 0x7E representan caracteres que se pueden mostrar normalmente. Los caracteres representados por los códigos restantes, 0x80 a través de 0xff, varían entre los juegos de caracteres. Cada juego de caracteres incluye caracteres especiales diferentes, normalmente personalizados para un idioma o grupo de idiomas. La página de códigos de Windows 1252 y la página de códigos oem 437 se usan generalmente en la Estados Unidos.
Además de las páginas de códigos de Windows y OEM, las aplicaciones pueden usar páginas de código no nativas. Algunos ejemplos son las páginas de códigos EBCDIC y Macintosh.
Dos codificaciones de Unicode (UTF-7 y UTF-8) se implementan como páginas de códigos. Al igual que otras páginas de códigos, cada página es conocida por un identificador numérico y se puede controlar con muchas de las mismas funciones de API Unicode y juego de caracteres.
Las páginas de códigos pueden ser páginas de juego de caracteres de un solo byte (SBCS) o páginas de juego de caracteres de doble byte (DBCS). En las páginas SBCS, cada byte codifica directamente un solo carácter, de modo que sea posible representar exactamente 256 caracteres distintos (incluidos caracteres de control, letras, dígitos, puntuación, símbolos y similares). Las páginas de códigos DBCS se usan para idiomas como japonés y chino. En esta página de códigos, algunos caracteres tienen codificaciones de dos bytes con determinados valores de bytes (siempre valores mayores que 127) que actúan como "bytes de cliente potencial". En lugar de codificar caracteres en su propio derecho, los bytes de cliente potencial solo se pueden asignar a un carácter junto con un "byte final".
Algunos protocolos heredados requieren el uso de páginas de códigos SBCS y DBCS. Cada página de códigos SBCS/DBCS admite caracteres diferentes, pero ninguna página de códigos admite la amplitud completa de caracteres proporcionados por Unicode. Cada página de códigos SBCS/DBCS admite un subconjunto diferente, codificado de forma diferente.
Nota
Los datos convertidos de una página de códigos SBCS o DBCS a otra están sujetas a daños, ya que el mismo valor de datos en páginas de códigos diferentes puede codificar un carácter diferente. Los datos convertidos de Unicode a SBCS o DBCS están sujetos a pérdida de datos, ya que es posible que una página de códigos determinada no pueda representar todos los caracteres usados en esos datos Unicode concretos.
Además de las páginas de códigos SBCS y DBCS, las aplicaciones tienen disponibles las páginas de códigos del juego de caracteres multibyte 52936, 54936, 51949 y 5022x, que usan un enfoque similar al de un DBCS. Sin embargo, una página de códigos de juego de caracteres multibyte va más allá de las codificaciones de dos bytes de algunos caracteres. UTF-7 y UTF-8 usan un enfoque similar para codificar Unicode en función de un bytes de 7 y 8 bits, respectivamente. Para obtener más información, consulte Unicode.
Varias funciones Unicode y juego de caracteres permiten a las aplicaciones controlar páginas de códigos. Una aplicación puede usar las funciones GetCPInfo y GetCPInfoEx para obtener información sobre una página de códigos. Esta información incluye el carácter predeterminado que se usa cuando un carácter de una cadena convertida no tiene ninguna entrada correspondiente en la página de códigos.
Una aplicación puede usar las funciones MultiByteToWideChar y WideCharToMultiByte para convertir entre cadenas basadas en páginas de códigos de Windows y cadenas Unicode. Aunque sus nombres hacen referencia a "MultiByte", estas funciones funcionan igualmente bien con páginas de códigos de juego de caracteres multibyte, DBCS y SBCS.
Nota
WideCharToMultiByte puede perder algunos datos si la página de códigos proporcionada no puede representar todos los caracteres de una cadena Unicode.
La aplicación puede convertir entre páginas de códigos de Windows y páginas de códigos OEM mediante las funciones estándar de la biblioteca en tiempo de ejecución de C. Sin embargo, el uso de estas funciones supone un riesgo de pérdida de datos porque los caracteres que se pueden representar mediante cada página de códigos no coinciden exactamente.
Las aplicaciones también pueden llamar a la función GetACP . Esta función recupera el identificador de la página de códigos actual de Windows (ANSI).