Bibliothèque standard C++ <codecvt>
<codecvt>C'est un fichier d'en-tête de la bibliothèque standard C++ qui fournit des outils pour la conversion de caractères. Ce fichier d'en-tête comprend principalementstd::codecvtmodèles de classe et leurs spécialisations, prenant en charge les conversions entre encodages de caractères, telles que de UTF-8 à UTF-16, ou à partir de caractères larges (wchar_t) vers un caractère étroit (char), etc.std::codecvtLa classe est généralement associée àstd::wstring_convertclasse ensemble pour réaliser la conversion d'encodage des caractères.
Syntaxe
codecvtLes principales classes et fonctions de l'espace de noms sont les suivantes:
codecvt_base: définit le type d'état et les méthodes de gestion des erreurs pour la conversion d'encodage.codecvt_byname: une classe modèle utilisée pour créer des convertisseurs pour des encodages spécifiques.codecvt_utf8、codecvt_utf16: classe de conversion pour des encodages spécifiques.
Syntaxe de base
#include <codecvt>
#include <locale>
#include <string>
std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> converter;
std::wstring wide_string = converter.from_bytes("Hello, World!");
std::string narrow_string = converter.to_bytes(L"你好,世界!");
Exemple
Exemple 1: Conversion d'UTF-8 en UTF-16
Dans cet exemple, nous allons montrer comment utilisercodecvtpour convertir une chaîne encodée en UTF-8 en une chaîne large encodée en UTF-16.
Exemple
#include <codecvt>
#include <locale>
#include <string>
int main() {
// Créer un convertisseur UTF-8 vers UTF-16
std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> converter;
// Chaîne UTF-8 d'origine
std::string narrow_string = "Bonjour le monde !";
// Convertir en chaîne large UTF-16
std::wstring wide_string = converter.from_bytes(narrow_string);
// Afficher la chaîne large
std::wcout << L"Chaîne large : " << wide_string << std::endl;
// Reconvertir la chaîne large en chaîne UTF-8
std::string converted_string = converter.to_bytes(wide_string);
// Afficher la chaîne convertie
std::cout << "Chaîne convertie : " << converted_string << std::endl;
return 0;
}
Résultat de sortie :
Wide string: Hello, World! Converted string: Hello, World!
Exemple 2 : Conversion d'encodage avec codecvt_byname
Dans cet exemple, nous allons montrer comment utilisercodecvt_bynameclasse pour créer un convertisseur d'encodage basé sur un nom et l'utiliser pour la conversion.
Exemple
#include <codecvt>
#include <locale>
#include <string>
int main() {
// Créer un convertisseur basé sur un nom ; ici "zh_CN.UTF-8" représente l'encodage UTF-8 pour le chinois simplifié
std::wstring_convert<std::codecvt_byname<wchar_t>> converter("zh_CN.UTF-8");
// Chaîne UTF-8 d'origine
std::string narrow_string = "Bonjour, le monde !";
// Convertir en chaîne large
std::wstring wide_string = converter.from_bytes(narrow_string);
// Afficher la chaîne large
std::wcout << L"Chaîne large : " << wide_string << std::endl;
// Reconvertir la chaîne large en chaîne UTF-8
std::string converted_string = converter.to_bytes(wide_string);
// Afficher la chaîne convertie
std::cout << "Chaîne convertie : " << converted_string << std::endl;
return 0;
}
Résultat de sortie :
Wide string: 你好,世界! Converted string: 你好,世界!
std::codecvtSpécialisation de modèle de classe
std::codecvtIl existe plusieurs versions de spécialisation pour différentes conversions d'encodage de caractères :
std::codecvt_utf8<wchar_t>: caractère large (wchar_t) et UTF-8.std::codecvt_utf8_utf16<char16_t>: Conversion entre UTF-8 et UTF-16.std::codecvt_utf8<char32_t>: Conversion entre UTF-8 et UTF-32.
std::wstring_convertmodèle de classe
std::wstring_convertLe modèle de classe est une classe auxiliaire utilisée pour gérer le cycle de vie et la gestion des exceptions de la conversion d'encodage des caractères :
to_bytes: convertit des caractères larges ou des chaînes dans d'autres encodages en caractères étroits (séquences d'octets).from_bytes: convertit des caractères étroits (séquences d'octets) en caractères larges ou en chaînes dans d'autres encodages.
Notes
- Dans la norme C++17
std::codecvta été déprécié, et il est recommandé d'utiliser des solutions alternatives (comme la bibliothèque ICU) pour la conversion d'encodage de caractères à l'avenir. - Pour les applications multiplateformes, un soin particulier doit être apporté à la gestion de l'encodage des caractères afin de garantir un comportement cohérent sur toutes les plateformes.
Résumé
<codecvt>Il fournit un ensemble puissant d'outils pour la conversion entre différents encodages de caractères, en particulier parmi UTF-8, UTF-16 et les caractères larges. Bien que déprécié en C++17, il reste un outil utile lors de la gestion de la conversion d'encodage de caractères. Comprendre et maîtriser l'utilisation de ces outils peut vous aider à écrire des applications plus flexibles et internationalisées. Si vous avez des exigences d'utilisation spécifiques ou des questions, vous pouvez en discuter davantage.