Suporte a Unicode e Multibyte Character Set (MBCS)

Alguns idiomas, por exemplo, japonês e chinês, têm conjuntos de caracteres grandes. Para dar suporte à programação para esses mercados, o MFC (biblioteca Microsoft Foundation Class) permite duas abordagens diferentes para lidar com conjuntos de caracteres grandes:

  • Unicode, wchar_t caracteres largos baseados e cadeias de caracteres codificadas como UTF-16.

  • MBCS (Conjuntos de Caracteres Multibyte), caracteres e cadeias de caracteres de bytes únicos ou duplos baseados char codificados em um conjunto de caracteres específico de localidade.

Observação

A Microsoft recomenda as bibliotecas MFC Unicode para todos os novos desenvolvimentos.
As bibliotecas MBCS foram preteridas no Visual Studio 2013 e no Visual Studio 2015. Esse não é mais o caso.
A partir do Visual Studio 2017, as bibliotecas MBCS não são mais preteridas e não geram avisos de depreciação.

Suporte do MFC para cadeias de caracteres Unicode

Toda a biblioteca de classes MFC está condicionalmente habilitada para caracteres Unicode e cadeias de caracteres armazenadas em caracteres largos como UTF-16. Em particular, a classe CString é habilitada para Unicode.

Esses arquivos de biblioteca, depurador e DLL são usados para dar suporte ao Unicode no MFC:

MFCversãoU.LIB
MFCversãoUD.LIB
MFCMversãoU.LIB
MFCMversãoUD.LIB
MFCSversãoU.LIB
MFCSversãoUD.LIB
UAFXCW.LIB
UAFXCWD.LIB

MFCversãoU.PDB
MFCversãoUD.PDB
MFCMversãoU.PDB
MFCMversãoUD.PDB
MFCSversãoU.PDB
MFCSversãoUD.PDB
UAFXCW.PDB
UAFXCWD.PDB

MFCversãoU.DLL
MFCversãoUD.DLL
MFCMversãoU.DLL
MFCMversãoUD.DLL

(a versão representa o número de versão do arquivo, por exemplo, '140' significa versão 14.0.)

CString é baseado no tipo de dados TCHAR. Se o símbolo _UNICODE for definido para uma compilação do programa, TCHAR será definido como tipo wchar_t, um tipo de codificação de caracteres de 16 bits. Caso contrário, TCHAR será definido como char, a codificação normal de caracteres de 8 bits. Portanto, em Unicode, um CString é composto por caracteres de 16 bits. Sem Unicode, ele é composto por caracteres do tipo char.

Para concluir a programação Unicode do aplicativo, você também deve:

  • Usar a macro _T para codificar condicionalmente cadeias de caracteres literais para serem portáteis para Unicode.

  • Ao passar cadeias de caracteres, preste atenção se os argumentos de função exigem um comprimento em caracteres ou um comprimento em bytes. A diferença é importante se você estiver usando cadeias de caracteres Unicode.

  • Use versões portáteis das funções de tratamento de cadeia de caracteres em tempo de execução C.

  • Use os seguintes tipos de dados para caracteres e ponteiros de caractere:

    • Use TCHAR onde você usaria char.

    • Use LPTSTR onde você usaria char*.

    • Use LPCTSTR onde você usaria const char*. CString fornece o operador LPCTSTR para converter entre CString e LPCTSTR.

CString também fornece construtores, operadores de atribuição e operadores de comparação com reconhecimento Unicode.

A Referência da Biblioteca de Runtime define versões portáteis de todas as suas funções de tratamento de cadeia de caracteres. Para obter mais informações, consulte a categoria Internacionalização.

Suporte MFC para cadeias de caracteres MBCS

A biblioteca de classes também está habilitada para conjuntos de caracteres multibyte, mas apenas para DBCS (conjuntos de caracteres de byte duplo).

Em um conjunto de caracteres multibyte, um caractere pode ter um ou 2 bytes de largura. Se ele tiver 2 bytes de largura, seu primeiro byte será um "byte principal" especial que é escolhido de um intervalo específico, dependendo de qual página de código está em uso. Juntos, o líder e os "bytes de trilha" especificam uma codificação de caracteres exclusiva.

Se o símbolo _MBCS for definido para uma compilação do programa, digite TCHAR, no qual CString é baseado e mapeia para char. Cabe a você determinar quais bytes em um CString são bytes de chumbo e quais são bytes de trilha. A biblioteca de tempo de execução C fornece funções para ajudar você a determinar isso.

Em DBCS, uma determinada cadeia de caracteres pode conter todos os caracteres ANSI de byte único, todos os caracteres de byte duplo ou uma combinação dos dois. Essas possibilidades exigem cuidados especiais na análise de cadeias de caracteres. Isso inclui objetos CString.

Observação

A serialização de cadeia de caracteres Unicode no MFC pode ler cadeias de caracteres Unicode e MBCS, independentemente da versão do aplicativo em execução. Seus arquivos de dados são portáteis entre as versões Unicode e MBCS do programa.

As funções membro CString usam versões especiais de "texto genérico" das funções de tempo de execução C chamadas ou usam funções com reconhecimento Unicode. Portanto, por exemplo, se uma função CString normalmente chamar strcmp, ela chamará a função _tcscmp de texto genérico correspondente. Dependendo de como os símbolos _MBCS e _UNICODE são definidos, _tcscmp os mapeia da seguinte maneira:

Símbolos Função
_MBCS definido _mbscmp
_UNICODE definido wcscmp
Nenhum símbolo definido strcmp

Observação

Os símbolos _MBCS e _UNICODE são mutuamente exclusivos.

Mapeamentos de função de texto genérico para todas as rotinas de tratamento de cadeia de caracteres em tempo de execução são discutidos na Referência da Biblioteca de Runtime C. Para obter uma lista, consulte Internacionalização.

Da mesma forma, os métodos CString são implementados usando mapeamentos de tipo de dados genéricos. Para habilitar o MBCS e o Unicode, o MFC usa TCHAR para char ou wchar_t, LPTSTR para char* ou wchar_t*, e LPCTSTR para const char* ou const wchar_t*. Estes garantem os mapeamentos corretos para MBCS ou Unicode.

Confira também

Cadeias de caracteres (ATL/MFC)
Manipulação de cadeias de caracteres