Quelle est la différence entre les type char et wchar_t ?
Le C++ possède deux types de caractères : le classique type
char, dont la taille est définie comme faisant 1 byte (sizeof( char ) = 1), et le type caractère long (
wide char)
wchar_t dont la taille et le type réel sont laissés à la libre appréciation de chaque compilateur (
implementation defined). Ainsi, avec Visual C++ sous Windows,
wchar_t fait 2 octets, alors qu'avec g++ sous GNU/Linux il en fait 4.
Le type
char de 8 bits (car un byte ne fait pas toujours 8 bits) est aussi appelé ANSI char, pour le différencier du wide char
wchar_t. Etant donné que la plupart des machines modernes définissent la taille d'un byte à 8 bits, il est courant de parler d'ANSI string pour les
char*, et de wide string pour les
wchar_t* dans la terminologie purement C++. Comme les wide string ont généralement vocation à stocker des chaînes Unicode, on désigne aussi courament les
wchar_t* par chaînes Unicode, bien que le standard n'ai pas cette notion.
Le C++ ne précise rien quant au système de codage de caractères (
charset) associé à ces différents types de chaînes de caractères. En général, le type
char sert à manipuler des caractères ASCII et le type
wchar_t des caractères Unicode (dont le charset dépend de votre système / compilateur : UTF-16 sur 2 octets, UTF-32 sur 4...). Mais rien n'est définit par la norme. Celle-ci stipule simplement que
char et
wchar_t servent à stocker des caractères. Libre à vous de choisir le système d'encodage de ces derniers.
En général, votre programme va associer au type
char le charset utilisé par la plateforme cible. Sur un ancien système IBM,
char servira à manipuler des caractères EBCDIC. Sous Windows, il servira généralement à manipuler des caractères ASCII étendus (spécifiques à la langue en cours d'utilisation) mais aussi éventuellement des caractères OEM hérités de MS-DOS (typiquement pour afficher correctdement les accents dans la console).
Partager