Prise en charge des jeux de caractères Unicode et MBCS (Multibyte Character Set)
Certaines langues, par exemple, le japonais et le chinois, ont des jeux de caractères volumineux. Pour prendre en charge la programmation pour ces marchés, la bibliothèque de classes Microsoft Foundation (MFC) permet deux approches différentes de la gestion des jeux de caractères volumineux :
Unicode,
wchar_t
caractères larges et chaînes encodés en UTF-16.Jeux de caractères multioctets (MBCS),
char
caractères uniques ou double octets et chaînes encodés dans un jeu de caractères spécifique aux paramètres régionaux.
Remarque
Microsoft recommande les bibliothèques Unicode MFC pour tout nouveau développement.
Les bibliothèques MBCS ont été déconseillées dans Visual Studio 2013 et Visual Studio 2015. Cela n’est plus le cas.
À compter de Visual Studio 2017, les bibliothèques MBCS ne sont plus déconseillées et ne génèrent pas d’avertissements de dépréciation.
Prise en charge de MFC pour les chaînes Unicode
La bibliothèque de classes MFC entière est activée de manière conditionnelle pour les caractères Unicode et les chaînes stockés dans des caractères larges sous la forme UTF-16. En particulier, la classe CString
est compatible Unicode.
Ces fichiers bibliothèque, débogueur et DLL sont utilisés pour prendre en charge Unicode dans MFC :
Version MFCU.LIB
MFCversionUD. LIB
MFCMversionU.LIB
MFCMversionUD. LIB
MFCSversionU.LIB
MFCSversionUD. LIB
UAFXCW. LIB
UAFXCWD. LIB
Version MFCU.PDB
MFCversionUD. PDB
MFCMversionU.PDB
MFCMversionUD. PDB
Version MFCSU.PDB
MFCSversionUD. PDB
UAFXCW. PDB
UAFXCWD. PDB
VersionMFCU.DLL
VersionMFCUD.DLL
Version de MFCMU.DLL
Version de MFCMUD.DLL
(la version représente le numéro de version du fichier ; par exemple, « 140 » signifie la version 14.0.)
CString
est basé sur le type de TCHAR
données. Si le symbole _UNICODE
est défini pour une build de votre programme, TCHAR
est défini comme type wchar_t
, un type d’encodage de caractères 16 bits. Sinon, TCHAR
est défini en tant qu’encodage char
de caractères 8 bits normal. Par conséquent, sous Unicode, un CString
objet est composé de caractères 16 bits. Sans Unicode, il est composé de caractères de type char
.
Pour terminer la programmation Unicode de votre application, vous devez également :
Utilisez la
_T
macro pour coder conditionnellement des chaînes littérales pour être portables dans Unicode.Lorsque vous passez des chaînes, faites attention à savoir si les arguments de fonction nécessitent une longueur en caractères ou une longueur en octets. La différence est importante si vous utilisez des chaînes Unicode.
Utilisez des versions portables des fonctions de gestion des chaînes au moment de l’exécution C.
Utilisez les types de données suivants pour les caractères et les pointeurs de caractères :
Utilisez
TCHAR
l’emplacement où vous utiliseriezchar
.Utilisez
LPTSTR
l’emplacement où vous utiliseriezchar
*.Utilisez
LPCTSTR
l’emplacement où vous utiliseriezconst char
*.CString
fournit l’opérateurLPCTSTR
à convertir entreCString
etLPCTSTR
.
CString
fournit également des constructeurs, des opérateurs d’affectation et des opérateurs de comparaison prenant en charge Unicode.
La référence de la bibliothèque d’exécution définit les versions portables de toutes ses fonctions de gestion des chaînes. Pour plus d’informations, consultez la catégorie Internationalisation.
Prise en charge de MFC pour les chaînes MBCS
La bibliothèque de classes est également activée pour les jeux de caractères multioctets, mais uniquement pour les jeux de caractères à deux octets (DBCS).
Dans un jeu de caractères multioctets, un caractère peut avoir une ou deux octets de large. S’il s’agit de 2 octets de large, son premier octet est un « octet de prospect » spécial choisi à partir d’une plage particulière, selon la page de codes utilisée. Pris ensemble, le prospect et les « octets de fin » spécifient un encodage de caractères unique.
Si le symbole _MBCS
est défini pour une build de votre programme, tapez TCHAR
, sur lequel CString
est basé, mappe à char
. C’est à vous de déterminer quels octets d’un CString
sont des octets de prospect et qui sont des octets de fin. La bibliothèque runtime C fournit des fonctions pour vous aider à déterminer cela.
Sous DBCS, une chaîne donnée peut contenir tous les caractères ANSI d’un octet, tous les caractères double octets ou une combinaison des deux. Ces possibilités nécessitent des soins spéciaux dans les chaînes d’analyse. Cela inclut les CString
objets.
Remarque
La sérialisation des chaînes Unicode dans MFC peut lire les chaînes Unicode et MBCS, quelle que soit la version de l’application que vous exécutez. Vos fichiers de données sont portables entre les versions Unicode et MBCS de votre programme.
CString
les fonctions membres utilisent des versions spéciales de « texte générique » des fonctions runtime C qu’elles appellent, ou utilisent des fonctions prenant en charge Unicode. Par conséquent, par exemple, si une CString
fonction appelle strcmp
généralement , elle appelle plutôt la fonction _tcscmp
de texte générique correspondante. Selon la façon dont les symboles _MBCS
et _UNICODE
sont définis, _tcscmp
mappe comme suit :
Symboles | Fonction |
---|---|
_MBCS défini |
_mbscmp |
_UNICODE défini |
wcscmp |
Aucun des symboles définis | strcmp |
Remarque
Les symboles _MBCS
et _UNICODE
s’excluent mutuellement.
Les mappages de fonctions de texte générique pour toutes les routines de gestion des chaînes d’exécution sont abordés dans la référence de la bibliothèque d’exécution C. Pour obtenir une liste, consultez Internationalisation.
De même, CString
les méthodes sont implémentées à l’aide de mappages de types de données génériques. Pour activer à la fois MBCS et Unicode, MFC utilise TCHAR
pour char
ou wchar_t
, LPTSTR
pour* char
ou wchar_t*
, et LPCTSTR
pour ou const wchar_t*
.const char
* Celles-ci garantissent les mappages corrects pour MBCS ou Unicode.