Prise en charge pour Unicode
Unicode est une spécification pour prendre en charge tous les jeux de caractères, y compris ceux qui ne peuvent pas être représentés dans un octet unique. Si vous programmez un marché international, nous vous recommandons d’utiliser Unicode ou un jeu de caractères multioctets (Mo CS). Vous pouvez également coder votre programme pour pouvoir le générer en modifiant un commutateur.
Un caractère large est un code de caractère multilingue de 2 octets. Des dizaines de milliers de caractères, comprenant presque tous les caractères utilisés dans le monde entier, y compris les symboles techniques et les caractères de publication spéciaux, peuvent être représentés en fonction de la spécification Unicode en tant que caractère large unique encodé à l’aide de UTF-16. Les caractères qui ne peuvent pas être représentés dans un seul caractère large peuvent être représentés dans une paire Unicode à l’aide de la fonctionnalité de paire de substitution Unicode. Étant donné que presque tous les caractères utilisés en commun sont représentés dans UTF-16 dans un caractère large unique de 16 bits, l’utilisation de caractères larges simplifie la programmation avec des jeux de caractères internationaux. Les caractères larges encodés à l’aide de UTF-16LE (pour little-endian) sont le format de caractère natif pour Windows.
Une chaîne de caractères larges est représentée sous la forme d'un tableau wchar_t[]
et est pointée par un pointeur wchar_t*
. Il est possible de représenter tout caractère ASCII sous la forme d'un caractère large en lui ajoutant la lettre L comme préfixe. Par exemple, L'\0' est le caractère NULL large (16 bits) de fin. De même, il est possible de représenter toute chaîne ASCII sous la forme d'un littéral de chaîne à caractères larges en ajoutant la lettre L comme préfixe au littéral ASCII (L"Hello").
En règle générale, les caractères larges prennent plus d'espace en mémoire que les caractères multioctets mais sont plus rapides à traiter. En outre, seuls un seul paramètre régional peut être représenté à la fois dans un encodage multioctet, tandis que tous les jeux de caractères du monde sont représentés simultanément par la représentation Unicode.
Toute l'infrastructure MFC prend en charge la spécification Unicode, et MFC permet la prise en charge d'Unicode en utilisant des macros portables, comme illustré dans le tableau ci-dessous.
Types de données portables dans MFC
Type de données non portables | Remplacé par cette macro |
---|---|
char , wchar_t |
_TCHAR |
char* , LPSTR (type de données Win32), LPWSTR |
LPTSTR |
const char* , LPCSTR (type de données Win32), LPCWSTR |
LPCTSTR |
La classe CString
utilise _TCHAR
comme base et fournit des constructeurs et des opérateurs pour des conversions faciles. Il est possible d'écrire la plupart des opérations de chaînes pour Unicode en utilisant la même logique que celle utilisée pour traiter le jeu de caractères Windows ANSI, si ce n'est que l'unité d'opération élémentaire est un caractère de 16 bits à la place d'un octet de 8 bits. Contrairement à l'utilisation de jeux de caractères multioctets, vous n'avez pas à (et ne devriez pas) traiter un caractère Unicode comme s'il s'agissait de deux octets distincts. Toutefois, vous devez gérer la possibilité d’un seul caractère représenté par une paire de caractères larges. En général, n’écrivez pas de code qui suppose que la longueur d’une chaîne est identique au nombre de caractères, qu’il soit étroit ou large, qu’il contient.
Que voulez-vous faire ?
Utiliser la prise en charge du jeu de caractères MFC Unicode et multioctets (Mo CS)
Utiliser wmain pour que je puisse passer des arguments à caractère large à mon programme
En savoir plus sur les mappages de texte générique pour la portabilité de largeur d’octet