Partager via


Prise en charge des jeux de caractères multioctets (MBCS)

Les jeux de caractères multioctets (MBSC) sont une approche plus ancienne de la nécessité de prendre en charge certains jeux de caractères (japonais et chinois, par exemple) qui ne peuvent pas être représentés par un seul octet. Si vous procédez à un nouveau développement, vous devez utiliser Unicode pour toutes les chaînes de texte à l'exception peut-être des chaînes système qui ne sont pas visibles des utilisateurs finaux. MBCS est une technologie héritée qui n'est pas recommandée pour un nouveau développement.

L'implémentation MBCS la plus courante repose sur les jeux caractères codés sur deux octets (DBCS). Visual C++ en général, et MFC en particulier, est totalement compatible avec DBCS.

Pour obtenir des exemples, consultez les fichiers de code source MFC.

Pour les plateformes utilisées sur les marchés dont les langues utilisent des jeux de caractères volumineux, la meilleure alternative au format Unicode est MBCS. MFC prend en charge MBCS en utilisant des types de données internationalisables et des fonctions runtime C. Vous devez en faire de même dans votre code.

Dans le cadre de MBCS, les caractères sont codés sur 1 ou 2 octets. Dans les caractères codés sur 2 octets, le premier octet (ou octet de tête) signale que lui-même et l'octet suivant doivent être interprétés comme un seul et même caractère. Le premier octet est issu d'une plage de codes réservée à une utilisation comme octets de tête. La possibilité que les plages d'octets puissent ou non être des octets de tête dépend de la page de codes utilisée. Par exemple, la page de codes japonaise 932 utilise la plage de 0x81 à 0x9F en tant qu'octets de tête, alors que la page de codes coréenne 949 utilise une plage différente.

Prenez en compte tous les éléments suivants dans votre programmation MBCS.

Les caractères MBCS de l’environnement MBCS peuvent apparaître dans des chaînes telles que des noms de fichiers et de répertoires.

Opérations de modification

Les opérations de modification dans les applications MBCS doivent porter sur des caractères, et non des octets. Le pointage ne doit pas fractionner un caractère, la touche Flèche droite doit se déplacer vers la droite d’un caractère, et ainsi de suite. La suppression doit supprimer un caractère ; Annuler devrait le réinsérer.

Gestion des chaînes

Dans une application qui utilise MBCS, la gestion des chaînes pose des problèmes spécifiques. Les caractères des deux largeurs étant mélangés dans une même chaîne, vous devez penser à vérifier la présence d'octets de tête.

Prise en charge de la bibliothèque Runtime

La bibliothèque Runtime C et MFC prennent en charge la programmation sur un octet, MBCS et Unicode. Les chaînes à octet unique sont traitées avec la str famille de fonctions d’exécution, les chaînes MBCS sont traitées avec les fonctions correspondantes _mbs et les chaînes Unicode sont traitées avec les fonctions correspondantes wcs . Les implémentations des fonctions membres de la classe MFC utilisent des fonctions runtime portables qui sont mappées, quand les circonstances sont favorables, à la famille de fonctions str normale, aux fonctions MBCS ou aux fonctions Unicode, comme décrit dans « Portabilité MBCS/Unicode ».

Portabilité MBCS/Unicode

À l’aide du fichier d’en-tête tchar.h, vous pouvez générer des applications monooctets, MBCS et Unicode à partir des mêmes sources. Tchar.h définit les macros précédées de _tcs, qui correspondent à str, _mbsou wcs aux fonctions, le cas échéant. Pour générer pour MBCS, définissez le symbole_MBCS. Pour générer pour Unicode, définissez le symbole _UNICODE. Par défaut, _UNICODE est défini pour les applications MFC. Pour plus d’informations, consultez Mappages de texte générique dans tchar.h.

Remarque

Le comportement n’est pas défini si vous définissez les deux _UNICODE et _MBCS.

Les fichiers d'en-tête Mbctype.h et Mbstring.h définissent les fonctions et macros propres à MBCS, dont vous pouvez avoir besoin dans certains cas. Par exemple, _ismbblead vous indique si un octet spécifique dans une chaîne est un octet de tête.

Pour une portabilité internationale, codez votre programme avec des jeux de caractères Unicode ou multioctets (MBCS).

Que voulez-vous faire ?

Voir aussi

Texte et chaînes
Prise en charge MBCS dans Visual C++