Internacionalización
La mayoría de los códigos C y C++ tradicionales hacen suposiciones sobre la manipulación de caracteres y cadenas que no funcionan bien para las aplicaciones internacionales. Aunque MFC y la biblioteca en tiempo de ejecución admiten Unicode o MBCS, sigue funcionando. Para guiarle, en esta sección se explica el significado de "habilitación internacional" en Visual C++:
Tanto Unicode como MBCS están habilitados mediante tipos de datos portátiles en listas de parámetros de función MFC y tipos de valor devuelto. Estos tipos se definen condicionalmente de las maneras adecuadas, en función de si la compilación define el símbolo
_UNICODE
o el símbolo_MBCS
(lo que significa DBCS). Las distintas variantes de las bibliotecas de MFC se vinculan automáticamente con la aplicación, en función de cuál de estos dos símbolos defina la compilación.El código de la biblioteca de clases usa funciones en tiempo de ejecución portátiles y otros medios para garantizar el comportamiento correcto de Unicode o MBCS.
Todavía debe controlar ciertos tipos de tareas de internacionalización en el código:
Use las mismas funciones portátiles en tiempo de ejecución que hacen que MFC sea portátil en cualquier entorno.
Haga que las cadenas literales y los caracteres sean portátiles en cualquiera de los entornos, mediante la macro
_T
. Para más información, consulte Asignaciones de texto genérico en tchar.h.Tome precauciones al analizar cadenas en MBCS. Estas precauciones no son necesarias en Unicode. Para obtener más información, consulte Sugerencias de programación de MBCS.
Tenga cuidado si mezcla caracteres ANSI (8 bits) y Unicode (16 bits) en la aplicación. Es posible usar caracteres ANSI en algunas partes del programa y caracteres Unicode en otros, pero no se pueden mezclar en la misma cadena.
No codificar cadenas de forma rígida en la aplicación. En su lugar, consícelas a los recursos STRINGTABLE agregándolos al archivo .rc de la aplicación. A continuación, la aplicación se puede localizar sin necesidad de cambios en el código fuente ni volver a compilarla. Para obtener más información sobre los recursos STRINGTABLE, vea Editor de cadenas.
Nota:
Los juegos de caracteres Europeos y MBCS tienen algunos caracteres, como letras acentuadas, con códigos de caracteres mayores que 0x80. Dado que la mayoría del código usa caracteres firmados, estos caracteres mayores que 0x80 se extienden al convertir en int
. Este es un problema para la indexación de matrices porque los caracteres extendidos de signo, siendo negativos, índices fuera de la matriz. Los idiomas que usan MBCS, como el japonés, también son únicos. Dado que un carácter puede constar de 1 o 2 bytes, siempre debe manipular ambos bytes al mismo tiempo.