UTF8 indépendant de la plate-forme et conversion de caractères larges en STL
La conversion entre les chaînes UTF8 dans std::string et std::wstring est un exigence courante lorsque l’on travaille avec des caractères larges. Bien qu'il existe des fonctions spécifiques à la plate-forme telles que MultiByteToWideChar, elles ne conviennent pas au code ciblant plusieurs systèmes d'exploitation.
Solution pour C 11 et versions ultérieures
En C 11, la norme La bibliothèque a introduit la prise en charge de la conversion de caractères via std :: codecvt. Cela permet une conversion UTF8 indépendante de la plate-forme à l'aide du code suivant :
// UTF-8 to UTF-16 std::string utf8Source; std::wstring_convert<std::codecvt_utf8_utf16<char16_t>, char16_t> convert; std::u16string utf16Dest = convert.from_bytes(utf8Source); // UTF-16 to UTF-8 std::u16string utf16Source; std::string utf8Dest = convert.to_bytes(utf16Source);
Autres approches
Comme l'ont indiqué d'autres réponses, des approches alternatives existent :
Choisir la bonne approche
Le choix de la méthode de conversion dépend des exigences et des dépendances du projet. Le std::codecvt de C 11 est recommandé pour les projets qui privilégient la simplicité et la portabilité. Pour des besoins complexes ou spécifiques à une plateforme, pensez à Boost.Locale ou iconv.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!