Namespaces
Variants

std:: codecvt_byname

From cppreference.net
Défini dans l'en-tête <locale>
template < class InternT, class ExternT, class State >
class codecvt_byname : public std:: codecvt < InternT, ExternT, State > ;

std::codecvt_byname est une facette std::codecvt qui encapsule les règles de conversion de caractères multioctets/étendus d'une locale spécifiée lors de sa construction.

Table des matières

Spécialisations

La bibliothèque standard garantit la fourniture des spécialisations suivantes :

Défini dans l'en-tête <locale>
std :: codecvt_byname < char , char , std:: mbstate_t > conversion identité
std :: codecvt_byname < char16_t , char , std:: mbstate_t >
(depuis C++11) (obsolète en C++20)
conversion entre UTF-16 et UTF-8
std :: codecvt_byname < char16_t , char8_t, std:: mbstate_t >
(depuis C++20)
conversion entre UTF-16 et UTF-8
std :: codecvt_byname < char32_t , char , std:: mbstate_t >
(depuis C++11) (obsolète en C++20)
conversion entre UTF-32 et UTF-8
std :: codecvt_byname < char32_t , char8_t, std:: mbstate_t >
(depuis C++20)
conversion entre UTF-32 et UTF-8
std :: codecvt_byname < wchar_t , char , std:: mbstate_t > conversion spécifique aux paramètres régionaux entre chaîne large et jeux de caractères étroits

Fonctions membres

(constructeur)
construit une nouvelle facette codecvt_byname
(fonction membre publique)
(destructeur)
détruit une facette codecvt_byname
(fonction membre protégée)

std::codecvt_byname:: codecvt_byname

explicit codecvt_byname ( const char * name, std:: size_t refs = 0 ) ;
explicit codecvt_byname ( const std:: string & name, std:: size_t refs = 0 ) ;
(depuis C++11)

Construit un nouveau facet std::codecvt_byname pour une locale avec name .

refs est utilisé pour la gestion des ressources : si refs == 0 , l'implémentation détruit le facet lorsque le dernier objet std::locale le contenant est détruit. Sinon, l'objet n'est pas détruit.

Paramètres

name - le nom de la locale
refs - le nombre de références liées au facet

std::codecvt_byname:: ~codecvt_byname

protected :
~codecvt_byname ( ) ;

Détruit le facet.

Hérité de std:: codecvt

Types imbriqués

Type Définition
intern_type internT
extern_type externT
state_type stateT

Membres de données

Membre Description
std::locale::id id [static] l'identifiant du facet

Fonctions membres

appelle do_out
(fonction membre publique de std::codecvt<InternT,ExternT,StateT> )
appelle do_in
(fonction membre publique de std::codecvt<InternT,ExternT,StateT> )
appelle do_unshift
(fonction membre publique de std::codecvt<InternT,ExternT,StateT> )
appelle do_encoding
(fonction membre publique de std::codecvt<InternT,ExternT,StateT> )
appelle do_always_noconv
(fonction membre publique de std::codecvt<InternT,ExternT,StateT> )
appelle do_length
(fonction membre publique de std::codecvt<InternT,ExternT,StateT> )
appelle do_max_length
(fonction membre publique de std::codecvt<InternT,ExternT,StateT> )

Fonctions membres protégées

[virtual]
convertit une chaîne de InternT vers ExternT , par exemple lors de l'écriture dans un fichier
(fonction membre protégée virtuelle de std::codecvt<InternT,ExternT,StateT> )
[virtual]
convertit une chaîne de ExternT vers InternT , par exemple lors de la lecture depuis un fichier
(fonction membre protégée virtuelle de std::codecvt<InternT,ExternT,StateT> )
[virtual]
génère la séquence de caractères de terminaison ExternT pour une conversion incomplète
(fonction membre protégée virtuelle de std::codecvt<InternT,ExternT,StateT> )
[virtual]
renvoie le nombre de caractères ExternT nécessaires pour produire un caractère InternT , si constant
(fonction membre protégée virtuelle de std::codecvt<InternT,ExternT,StateT> )
teste si le facet encode une conversion d'identité pour toutes les valeurs d'argument valides
(fonction membre protégée virtuelle de std::codecvt<InternT,ExternT,StateT> )
[virtual]
calcule la longueur de la chaîne ExternT qui serait consommée par la conversion dans le tampon InternT donné
(fonction membre protégée virtuelle de std::codecvt<InternT,ExternT,StateT> )
[virtual]
renvoie le nombre maximum de caractères ExternT qui pourraient être convertis en un seul caractère InternT
(fonction membre protégée virtuelle de std::codecvt<InternT,ExternT,StateT> )

Hérité de std:: codecvt_base

Type imbriqué Définition
enum result { ok, partial, error, noconv } ; Type d'énumération non-scopée
Constante d'énumération Définition
ok la conversion s'est terminée sans erreur
partial tous les caractères source n'ont pas été convertis
error un caractère invalide a été rencontré
noconv aucune conversion nécessaire, les types d'entrée et de sortie sont identiques

Exemple

Cet exemple démontre la lecture d'un fichier encodé en GB18030 en utilisant la facette codecvt d'une locale compatible GB18030.

#include <fstream>
#include <iostream>
#include <locale>
#include <string>
int main()
{
    // GB18030 narrow multibyte encoding
    std::ofstream("text.txt") << "\x7a"              // letter 'z', U+007a
                                 "\x81\x30\x89\x38"  // letter 'ß', U+00df
                                 "\xcb\xae"          // CJK ideogram '水' (water), U+6c34
                                 "\x94\x32\xbc\x35"; // musical sign '𝄋' (segno), U+1d10b
    std::wifstream fin("text.txt");
    fin.imbue(std::locale(fin.getloc(),
              new std::codecvt_byname<wchar_t, char, std::mbstate_t>("zh_CN.gb18030")));
    for (wchar_t c; fin.get(c);)
        std::cout << std::hex << std::showbase << static_cast<unsigned>(c) << '\n';
}

Sortie possible :

0x7a
0xdf
0x6c34
0x1d10b

Rapports de défauts

Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.

DR Appliqué à Comportement tel que publié Comportement correct
LWG 21 C++98 la bibliothèque standard n'avait pas besoin de fournir
aucune std::codecvt_byname spécialisation
deux spécialisations sont requises

Voir aussi

convertit entre les encodages de caractères, y compris UTF-8, UTF-16, UTF-32
(modèle de classe)