C++
Internationalisation en C ++
Recherche…
Remarques
Le langage C ++ ne dicte pas de jeu de caractères, certains compilateurs peuvent prendre en charge l'utilisation de UTF-8, ou même UTF-16. Cependant, rien ne garantit que des éléments autres que de simples caractères ANSI / ASCII seront fournis.
Ainsi, toute prise en charge linguistique internationale est définie par l'implémentation, en fonction de la plate-forme, du système d'exploitation et du compilateur que vous utilisez.
Plusieurs bibliothèques tierces (telles que International Unicode Committee Library) pouvant être utilisées pour étendre le support international de la plate-forme.
Comprendre les caractéristiques de la chaîne C ++
#include <iostream>
#include <string>
int main()
{
const char * C_String = "This is a line of text w";
const char * C_Problem_String = "This is a line of text ኚ";
std::string Std_String("This is a second line of text w");
std::string Std_Problem_String("This is a second line of ϯϵxϯ ኚ");
std::cout << "String Length: " << Std_String.length() << '\n';
std::cout << "String Length: " << Std_Problem_String.length() << '\n';
std::cout << "CString Length: " << strlen(C_String) << '\n';
std::cout << "CString Length: " << strlen(C_Problem_String) << '\n';
return 0;
}
Selon la plate-forme (Windows, OSX, etc.) et le compilateur (GCC, MSVC, etc.), ce programme peut ne pas compiler, afficher des valeurs différentes ou afficher les mêmes valeurs .
Exemple de sortie sous le compilateur Microsoft MSVC:
Longueur de chaîne: 31
Longueur de chaîne: 31
Longueur CString: 24
Longueur CString: 24
Cela montre que sous MSVC, chacun des caractères étendus utilisés est considéré comme un "caractère" unique et que cette plate-forme supporte entièrement les langues internationalisées.
Il convient de noter cependant que ce comportement est inhabituel, ces caractères internationaux sont stockés en interne sous la forme Unicode et ont donc en réalité plusieurs octets de long. Cela peut provoquer des erreurs inattendues
Sous le compilateur GNC / GCC, la sortie du programme est la suivante:
Longueur de chaîne: 31
Longueur de chaîne: 36
Longueur CString: 24
Longueur CString: 26
Cet exemple montre que, bien que le compilateur GCC utilisé sur cette plate-forme (Linux) prenne en charge ces caractères étendus, il utilise également ( correctement) plusieurs octets pour stocker un caractère individuel.
Dans ce cas, l'utilisation de caractères Unicode est possible, mais le programmeur doit faire très attention en se rappelant que la longueur d'une "chaîne" dans ce scénario est la longueur en octets , et non la longueur en caractères lisibles .
Ces différences sont dues à la façon dont des langues internationales sont gérées sur une base par plateforme - et plus important encore , que les chaînes C et C ++ utilisées dans cet exemple peut être considéré comme un tableau d'octets, de sorte que (pour cet usage) le langage C ++ considère un caractère (char) doit être un octet unique .