Partager via


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 (Mo CS)char basés sur des caractères simples ou doubles octets et des chaînes codées 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 Mo CS 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 Mo CS 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. APB
MFCMversionU.PDB
MFCMversionUD. APB
Version MFCSU.PDB
MFCSversionUD. APB
UAFXCW. APB
UAFXCWD. APB

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 charde 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 utiliseriez char.

    • Utilisez LPTSTR l’emplacement où vous utiliseriez char*.

    • Utilisez LPCTSTR l’emplacement où vous utiliseriez const char*. CString fournit l’opérateur LPCTSTR à convertir entre CString et LPCTSTR.

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 Mo CS

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 de chaîne Unicode dans MFC peut lire les chaînes Unicode et Mo CS, quelle que soit la version de l’application que vous exécutez. Vos fichiers de données sont portables entre Unicode et les versions Mo CS 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 strcmpgé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 Mo CS et Unicode, MFC utilise TCHAR pour char ou wchar_t, LPTSTR pour char* ou wchar_t*, et LPCTSTR pour const char* ou const wchar_t*. Elles garantissent les mappages corrects pour Mo CS ou Unicode.

Voir aussi

Chaînes (ATL/MFC)
Manipulation de chaînes