Compatibilidad con los juegos de caracteres multibyte (MBCS)
Actualización: noviembre 2007
Los juegos de caracteres multibyte (MBCS) son una alternativa a Unicode para la compatibilidad con juegos de caracteres, como el japonés y el chino, que no pueden representarse en un solo byte. Si se programa para un mercado internacional, conviene considerar la utilización de Unicode o de MBCS, o habilitar el programa de modo que se pueda generar para cualquiera de ellos cambiando un modificador.
La implementación más habitual de MBCS son los juegos de caracteres de doble byte (DBCS). Visual C++ en general, y MFC en particular, están totalmente habilitados para DBCS.
Para obtener ejemplos, vea los archivos de código fuente de MFC.
Para las plataformas utilizadas en mercados cuyos idiomas utilizan juegos de caracteres de gran tamaño, la mejor alternativa a Unicode es MBCS. MFC admite MBCS mediante el uso de tipos de datos internacionalizables y funciones en tiempo de ejecución de C. Los programadores deben hacer lo mismo en su propio código.
En MBCS, los caracteres están codificados en uno o dos bytes. En los caracteres de dos bytes, el primero, o byte inicial, indica que él mismo y el byte siguiente deben interpretarse como un solo carácter. El primer byte procede de un intervalo de códigos reservado para su utilización como bytes iniciales. Los intervalos de bytes que pueden ser bytes iniciales dependen de la página de códigos que se utiliza. Por ejemplo, la página de códigos japonesa 932 utiliza el intervalo de 0x81 a 0x9F como bytes iniciales, pero la página de códigos coreana 949 utiliza un intervalo distinto.
Conviene tener en cuenta los siguientes aspectos en la programación con MBCS.
Caracteres MBCS en el entorno
Los caracteres MBCS pueden aparecer en cadenas como nombres de archivo y de directorio.Operaciones de edición
Las operaciones de edición en aplicaciones MBCS se deben ejecutar en caracteres, no en bytes. El símbolo de intercalación no debe dividir un carácter, la tecla FLECHA DERECHA debe desplazar un carácter hacia la derecha, y así sucesivamente. Delete debe eliminar un carácter; Undo debe volver a insertarlo.Control de cadenas
En una aplicación que utiliza MBCS, el control de cadenas plantea problemas especiales. Los caracteres de ambos anchos se mezclan en una sola cadena; por consiguiente, no se debe olvidar de que hay que comprobar los bytes iniciales.Compatibilidad con bibliotecas en tiempo de ejecución
MFC y la biblioteca en tiempo de ejecución de C admiten la programación de un solo byte, MBCS y Unicode. Las cadenas de un solo byte se procesan con la familia str de funciones en tiempo de ejecución, las cadenas MBCS se procesan con las funciones _mbs correspondientes, y las cadenas Unicode se procesan con las funciones wcs correspondientes. Las implementaciones de funciones miembro de clase de MFC utilizan funciones en tiempo de ejecución portables, que se asignan bajo las circunstancias correctas a la familia str normal de funciones, las funciones MBCS o las funciones Unicode, como se describe en "Portabilidad de MBCS/Unicode".Portabilidad de MBCS/Unicode
Si se utiliza el archivo de encabezado Tchar.h, se pueden generar aplicaciones de un solo byte, MBCS y Unicode a partir de los mismos códigos fuente. Tchar.h define macros que empiezan por _tcs, que se asignan a las funciones str, _mbs o wcs, según proceda. Para generar MBCS, se ha de definir el símbolo _MBCS. Para generar Unicode, se ha de definir el símbolo _UNICODE. De forma predeterminada, _MBCS está definido para aplicaciones MFC. Para obtener más información, vea Asignaciones de texto genérico en Tchar.h.
Nota: |
---|
El comportamiento no se define si se definen conjuntamente _UNICODE y _MBCS. |
Los archivos de encabezado Mbctype.h y Mbstring.h definen macros y funciones específicas de MBCS, que pueden ser necesarias en algunos casos. Por ejemplo, _ismbblead indica si un determinado byte de una cadena es un byte inicial.
Con fines de portabilidad internacional, se debe codificar el programa con Unicode o con los juegos de caracteres multibyte (MBCS).