Compartir a través de


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ía char.

    • Use LPTSTR donde usaría char*.

    • Use LPCTSTR donde usaría const char*. CString proporciona el operador LPCTSTR para convertir entre CString y LPCTSTR.

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.

Consulte también

Cadenas (ATL/MFC)
Manipulación de cadenas