std:: codecvt
| 
           
           Défini dans l'en-tête
            
         
            
             <locale>
            
           
           | 
         ||
| 
           
           
            
             template
            
            
             <
            
             
         
             
              class
             
             InternT,
               | 
         ||
       Modèle de classe
       
        std::codecvt
       
       encapsule la conversion des chaînes de caractères, y compris les caractères larges et multioctets, d'un encodage à un autre. Toutes les opérations d'E/S de fichiers effectuées via
       
        
         
          std::
          
           basic_fstream
          
         
        
        
         <
        
        CharT
        
         >
        
       
       utilisent le facet
       
        std
        
         ::
        
        
         codecvt
        
        
         <
        
        CharT,
        
         char
        
        ,
        
         
          std::
          
           mbstate_t
          
         
        
        
         >
        
       
       de la locale associée au flux.
      
Diagramme d'héritage
         Table des matières | 
       
Spécialisations
La bibliothèque standard garantit la fourniture des spécialisations suivantes (elles sont requises pour être implémentées par tout objet locale ):
| 
          
          Défini dans l'en-tête
           
        
           
            <locale>
           
          
          | 
       |
| std :: codecvt < char , char , std:: mbstate_t > | conversion identité | 
| 
         
          std
          
           ::
          
          
           codecvt
          
          
           <
          
          
           char16_t
          
          ,
          
           char
          
          ,
          
           
            std::
            
             mbstate_t
            
           
          
          
           >
          
         
          (depuis C++11) (obsolète en C++20)  | 
        conversion entre UTF-16 et UTF-8 | 
| 
         
          std
          
           ::
          
          
           codecvt
          
          
           <
          
          
           char16_t
          
          , char8_t,
          
           
            std::
            
             mbstate_t
            
           
          
          
           >
          
         
          (depuis C++20) (obsolète)  | 
        conversion entre UTF-16 et UTF-8 | 
| 
         
          std
          
           ::
          
          
           codecvt
          
          
           <
          
          
           char32_t
          
          ,
          
           char
          
          ,
          
           
            std::
            
             mbstate_t
            
           
          
          
           >
          
         
          (depuis C++11) (obsolète en C++20)  | 
        conversion entre UTF-32 et UTF-8 | 
| 
         
          std
          
           ::
          
          
           codecvt
          
          
           <
          
          
           char32_t
          
          , char8_t,
          
           
            std::
            
             mbstate_t
            
           
          
          
           >
          
         
          (depuis C++20) (obsolète)  | 
        conversion entre UTF-32 et UTF-8 | 
| std :: codecvt < wchar_t , char , std:: mbstate_t > | conversion entre les jeux de caractères larges natifs du système et les jeux de caractères étroits sur un octet | 
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 de la facette | 
Fonctions membres
         construit un nouveau
         
          codecvt
         
         facet
         (fonction membre publique)  | 
       |
         invoque
         
          do_out
         
         (fonction membre publique)  | 
       |
         invoque
         
          do_in
         
         (fonction membre publique)  | 
       |
         invoque
         
          do_unshift
         
         (fonction membre publique)  | 
       |
         invoque
         
          do_encoding
         
         (fonction membre publique)  | 
       |
         invoque
         
          do_always_noconv
         
         (fonction membre publique)  | 
       |
         invoque
         
          do_length
         
         (fonction membre publique)  | 
       |
         invoque
         
          do_max_length
         
         (fonction membre publique)  | 
       
Fonctions membres protégées
         détruit un facet
         
          codecvt
         
         (fonction membre protégée)  | 
       |
| 
          
           
            
             
              [virtual]
             
            
           
           
          | 
        
         convertit une chaîne de
         
          InternT
         
         vers
         
          ExternT
         
         , comme lors de l'écriture dans un fichier
         (fonction membre virtuelle protégée)  | 
       
| 
          
           
            
             
              [virtual]
             
            
           
           
          | 
        
         convertit une chaîne de
         
          ExternT
         
         vers
         
          InternT
         
         , comme lors de la lecture depuis un fichier
         (fonction membre virtuelle protégée)  | 
       
| 
          
           
            
             
              [virtual]
             
            
           
           
          | 
        
         génère la séquence de caractères de terminaison
         
          ExternT
         
         pour une conversion incomplète
         (fonction membre virtuelle protégée)  | 
       
| 
          
           
            
             
              [virtual]
             
            
           
           
          | 
        
         retourne le nombre de caractères
         
          ExternT
         
         nécessaires pour produire un caractère
         
          InternT
         
         , si constant
         (fonction membre virtuelle protégée)  | 
       
| 
          
           
            
             
              [virtual]
             
            
           
           
          | 
        
         teste si le facet encode une conversion d'identité pour toutes les valeurs d'argument valides
          (fonction membre virtuelle protégée)  | 
       
| 
          
           
            
             
              [virtual]
             
            
           
           
          | 
        
         calcule la longueur de la chaîne
         
          ExternT
         
         qui serait consommée par la conversion dans le tampon
         
          InternT
         
         donné
         (fonction membre virtuelle protégée)  | 
       
| 
          
           
            
             
              [virtual]
             
            
           
           
          | 
        
         retourne le nombre maximum de caractères
         
          ExternT
         
         qui pourraient être convertis en un seul caractère
         
          InternT
         
         (fonction membre virtuelle protégée)  | 
       
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
        Les exemples suivants lisent un fichier UTF-8 en utilisant une locale qui implémente la conversion UTF-8 dans
        
         codecvt
         
          <
         
         
          wchar_t
         
         ,
         
          char
         
         ,
         
          
           std::
           
            mbstate_t
           
          
         
         
          >
         
        
        et convertissent une chaîne UTF-8 en UTF-16 en utilisant l'une des spécialisations standard de
        
         std::codecvt
        
        .
       
#include <codecvt> #include <cstdint> #include <fstream> #include <iomanip> #include <iostream> #include <locale> #include <string> // utility wrapper to adapt locale-bound facets for wstring/wbuffer convert template<class Facet> struct deletable_facet : Facet { template<class... Args> deletable_facet(Args&&... args) : Facet(std::forward<Args>(args)...) {} ~deletable_facet() {} }; int main() { // UTF-8 narrow multibyte encoding std::string data = reinterpret_cast<const char*>(+u8"z\u00df\u6c34\U0001f34c"); // or reinterpret_cast<const char*>(+u8"zß水🍌") // or "\x7a\xc3\x9f\xe6\xb0\xb4\xf0\x9f\x8d\x8c" std::ofstream("text.txt") << data; // using system-supplied locale's codecvt facet std::wifstream fin("text.txt"); // reading from wifstream will use codecvt<wchar_t, char, std::mbstate_t> // this locale's codecvt converts UTF-8 to UCS4 (on systems such as Linux) fin.imbue(std::locale("en_US.UTF-8")); std::cout << "The UTF-8 file contains the following UCS4 code units:\n" << std::hex; for (wchar_t c; fin >> c;) std::cout << "U+" << std::setw(4) << std::setfill('0') << static_cast<uint32_t>(c) << ' '; // using standard (locale-independent) codecvt facet std::wstring_convert< deletable_facet<std::codecvt<char16_t, char, std::mbstate_t>>, char16_t> conv16; std::u16string str16 = conv16.from_bytes(data); std::cout << "\n\nThe UTF-8 file contains the following UTF-16 code units:\n" << std::hex; for (char16_t c : str16) std::cout << "U+" << std::setw(4) << std::setfill('0') << static_cast<uint16_t>(c) << ' '; std::cout << '\n'; }
Sortie :
The UTF-8 file contains the following UCS4 code units: U+007a U+00df U+6c34 U+1f34c The UTF-8 file contains the following UTF-16 code units: U+007a U+00df U+6c34 U+d83c U+df4c
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 | Applicable à | Comportement publié | Comportement corrigé | 
|---|---|---|---|
| LWG 3767 | C++20 | 
         
          std
          
           ::
          
          
           codecvt
          
          
           <
          
          
           char16_t
          
          , char8_t,
          
           
            std::
            
             mbstate_t
            
           
          
          
           >
          
         
         et
          std :: codecvt < char32_t , char8_t, std:: mbstate_t > sont indépendants des paramètres régionaux  | 
        les a dépréciés | 
Voir aussi
| 
         Conversions de caractères
          | 
        
         Multioctets définis par les paramètres régionaux
          (UTF-8, GB18030)  | 
        
         UTF-8
          | 
        
         UTF-16
          | 
       
|---|---|---|---|
| UTF-16 | mbrtoc16 / c16rtomb (avec DR488 de C11) | 
          
          
           
            codecvt
           
          
          
           
            <
           
           
            char16_t
           
           ,
           
            char
           
           ,mbstate_t
           
            >
           
          
            | 
        N/A | 
| UCS-2 | c16rtomb (sans DR488 de C11) | codecvt_utf8 < char16_t > | codecvt_utf16 < char16_t > | 
| UTF-32 | 
          
          
           
            codecvt
           
          
          
           
            <
           
           
            char32_t
           
           ,
           
            char
           
           ,mbstate_t
           
            >
           
          
            | 
        
          codecvt_utf16 < char32_t >  | 
       |
| 
         système
         
          
           wchar_t
          
         
         :
          
          UTF-32
          
           (non-Windows)
          
            | 
        
          
          
           
            mbsrtowcs
           
          
          /
          
           
            wcsrtombs
           
          
            | 
        codecvt_utf8 < wchar_t > | codecvt_utf16 < wchar_t > | 
| 
         définit les erreurs de conversion de caractères
          (classe)  | 
       |
| 
         représente le
         
          
           std::codecvt
          
         
         fourni par le système pour les locales nommées
          (modèle de classe)  | 
       |
| 
          
           
            
             
              (C++11)
             
            
            
             
              (déprécié en C++17)
             
            
            
             
              (supprimé en C++26)
             
            
           
           
          | 
        
         convertit entre UTF-8 et UCS-2/UCS-4
          (modèle de classe)  | 
       
| 
          
           
            
             
              (C++11)
             
            
            
             
              (déprécié en C++17)
             
            
            
             
              (supprimé en C++26)
             
            
           
           
          | 
        
         convertit entre UTF-16 et UCS-2/UCS-4
          (modèle de classe)  | 
       
| 
          
           
            
             
              (C++11)
             
            
            
             
              (déprécié en C++17)
             
            
            
             
              (supprimé en C++26)
             
            
           
           
          | 
        
         convertit entre UTF-8 et UTF-16
          (modèle de classe)  |