Compatibilidad con Unicode y con el juego de caracteres multibyte (MBCS)
Algunos idiomas, por ejemplo, el japonés y el chino, tienen juegos de caracteres de gran tamaño. Para permitir la programación para estos mercados, la biblioteca MFC (Microsoft Foundation Class) permite dos enfoques diferentes para controlar juegos de caracteres de gran tamaño:
Unicode,
wchar_t
caracteres anchos basados en y cadenas codificadas como UTF-16.Conjuntos de caracteres multibyte (MBCS), caracteres y cadenas de un solo o doble byte basados en
char
codificados en un juego de caracteres específico de la configuración regional.
Nota:
Microsoft recomienda las bibliotecas Unicode de MFC para todo el desarrollo nuevo.
Las bibliotecas MBCS estaban en desuso en Visual Studio 2013 y Visual Studio 2015. Este ya no es el caso.
A partir de Visual Studio 2017, las bibliotecas MBCS ya no están en desuso y no generan advertencias de desuso.
Compatibilidad de MFC con cadenas Unicode
Toda la biblioteca de clases MFC está habilitada condicionalmente para caracteres y cadenas Unicode almacenadas en caracteres anchos como UTF-16. En particular, la clase CString
está habilitada para Unicode.
Estos archivos dll, depurador y biblioteca se usan para admitir Unicode en MFC:
MFCversiónU.LIB
MFCversiónUD.LIB
MFCMversiónU.LIB
MFCMversiónUD.LIB
MFCSversiónU.LIB
MFCSversiónUD.LIB
UAFXCW.LIB
UAFXCWD.LIB
MFCversiónU.PDB
MFCversiónUD.PDB
MFCversiónU.PDB
MFCMversiónUD.PDB
MFCSversiónU.PDB
MFCSversiónUD.PDB
UAFXCW.PDB
UAFXCWD.PDB
MFCversiónU.DLL
MFCversiónUD.DLL
MFCMversiónU.DLL
MFCMversiónUD.DLL
(versión representa el número de versión del archivo; por ejemplo, "140" significa versión 14.0).
CString
se basa en el tipo de datos TCHAR
. Si se define el símbolo _UNICODE
para una compilación del programa,TCHAR
se define como wchar_t
, que es un tipo de codificación de caracteres de 16 bits. De lo contrario,TCHAR
se define como char
, que es la codificación de caracteres de 8 bits normal. Por consiguiente, en Unicode, CString
consta de caracteres de 16 bits. Sin Unicode, se compone de caracteres de tipo char
.
Para completar la programación con Unicode de la aplicación, también debe hacer lo siguiente:
Utilice la macro
_T
para codificar condicionalmente las cadenas literales de código de forma que sean portables a Unicode.Al pasar cadenas, observe con atención si los argumentos de función requieren una longitud en caracteres o una longitud en bytes. La diferencia es importante si usa cadenas Unicode.
Utilice versiones portables de las funciones de control de cadenas en tiempo de ejecución de C.
Utilice los tipos de datos siguientes para caracteres y punteros de caracteres:
Use
TCHAR
donde usaríachar
.Use
LPTSTR
donde usaríachar
*.Use
LPCTSTR
donde usaríaconst char
*.CString
proporciona el operadorLPCTSTR
para convertir entreCString
yLPCTSTR
.
CString
también proporciona constructores, operadores de asignación y operadores de comparación que reconocen los caracteres Unicode.
La Referencia de la biblioteca en tiempo de ejecución define las versiones portables de todas sus funciones de control de cadenas. Para obtener más información, consulte la categoría Internacionalización.
Compatibilidad de MFC con cadenas MBCS
La biblioteca de clases también está habilitada para los juegos de caracteres multibyte, pero solo para los juegos de caracteres de doble byte (DBCS).
En un juego de caracteres multibyte, un carácter puede tener un ancho de uno o 2 bytes. Si tiene 2 bytes de ancho, su primer byte es un "byte principal" especial que se elige de un intervalo determinado, en función de la página de códigos que se use. Conjuntamente, los bytes iniciales y los “bytes finales” especifican una codificación de caracteres única.
Si se define el símbolo _MBCS
para una compilación del programa, el tipo TCHAR
en el que se basa CString
se asigna a char
. Es necesario determinar qué bytes de un CString
son bytes de cliente potencial y cuáles son bytes finales. La biblioteca en tiempo de ejecución de C proporciona funciones para ayudarle a determinarlo.
En DBCS, una cadena determinada puede contener solo caracteres ANSI de byte único, solo caracteres de doble byte o una combinación de ambos. Estas posibilidades requieren un cuidado especial al analizar las cadenas. Esto incluye los objetos CString
.
Nota:
La serialización de cadenas Unicode en MFC puede leer cadenas Unicode y MBCS sin tener en cuenta qué versión de la aplicación se está ejecutando. Los archivos de datos son portables entre las versiones Unicode y MBCS del programa.
Las funciones miembro de CString
utilizan versiones de “texto genérico” especiales de las funciones en tiempo de ejecución de C a las que llaman o usan funciones que reconocen Unicode. En consecuencia, si, por ejemplo, una función CString
llamaría normalmente a strcmp
, llama a la función de texto genérico _tcscmp
correspondiente en su lugar. Según la forma en que se hayan definido los símbolos _MBCS
y _UNICODE
, _tcscmp
se asigna como se indica a continuación:
Símbolos | Función |
---|---|
_MBCS definido |
_mbscmp |
_UNICODE definido |
wcscmp |
Ninguno de los dos símbolos definidos | strcmp |
Nota:
Los símbolos _MBCS
y _UNICODE
se excluyen mutuamente.
Las asignaciones de funciones de texto genéricas para todas las rutinas de control de cadenas en tiempo de ejecución se tratan en Referencia de la biblioteca en tiempo de ejecución de C. Para obtener una lista, consulte Internacionalización.
De forma similar, los métodos de CString
se implementan mediante asignaciones de tipos de datos genéricos. Para habilitar MBCS y Unicode, MFC utiliza TCHAR
para char
o wchar_t
, LPTSTR
para char
* o wchar_t*
, y LPCTSTR
para const char
* o const wchar_t*
. Esto garantiza las asignaciones correctas para MBCS o Unicode.