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 Unicode do MFC 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 substituiçã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 de 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ê usariachar
.Use
LPTSTR
onde você usariachar
*.Use
LPCTSTR
onde você usariaconst char
*.CString
fornece o operadorLPCTSTR
para converter entreCString
eLPCTSTR
.
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 tiver 2 bytes de largura, seu primeiro byte será um "byte principal" especial escolhido em 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 iniciais 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