std:: codecvt_utf8_utf16
| 
           
           Défini dans l'en-tête
            
         
            
             <codecvt>
            
           
           | 
         ||
| 
           
           
            
             template
            
            
             <
            
             
         
             
              class
             
             Elem,
               | 
         
          
           (depuis C++11)
          
           (obsolète en C++17) (supprimé en C++26)  | 
        |
       
        std::codecvt_utf8_utf16
       
       est une facette
       
        
         std::codecvt
        
       
       qui encapsule la conversion entre une chaîne d'octets encodée en UTF-8 et une chaîne de caractères encodée en UTF-16. Si
       
        Elem
       
       est un type 32-bit, une unité de code UTF-16 sera stockée dans chaque caractère 32-bit de la séquence de sortie.
      
Ceci est un facet de conversion N:M, et ne peut pas être utilisé avec std::basic_filebuf (qui ne permet que des conversions 1:N, telles que UTF-32/UTF-8, entre les encodages interne et externe). Ce facet peut être utilisé avec std::wstring_convert .
         Table des matières | 
       
Paramètres du Modèle
| Elem | - | soit char16_t , char32_t , ou wchar_t | 
| Maxcode | - | 
         la plus grande valeur de
         
          Elem
         
         que ce facet lira ou écrira sans erreur
         | 
       
| Mode | - | une constante de type std::codecvt_mode | 
Fonctions membres
| 
          
           
            
             
              (constructeur)
             
            
           
           
          | 
        
         construit un nouveau
         
          codecvt_utf8_utf16
         
         facet
         (fonction membre publique)  | 
       
| 
          
           
            
             
              (destructeur)
             
            
           
           
          | 
        
         détruit un
         
          codecvt_utf8_utf16
         
         facet
         (fonction membre publique)  | 
       
std::codecvt_utf8_utf16:: codecvt_utf8_utf16
| 
            
            
             
              explicit
             
             codecvt_utf8_utf16
             
              (
             
             
              
               std::
               
                size_t
               
              
             
             refs
             
              =
             
             
              0
             
             
              )
             
             
              ;
             
            
            
           | 
          ||
        Construit une nouvelle facette
        
         std::codecvt_utf8_utf16
        
        , transmet le compteur de références initial
        
         
          refs
         
        
        à la classe de base.
       
Paramètres
| refs | - | le nombre de références liées à la facette | 
std::codecvt_utf8_utf16:: ~codecvt_utf8_utf16
| 
            
            
             ~codecvt_utf8_utf16
             
              (
             
             
              )
             
             
              ;
             
            
            
           | 
          ||
Détruit le facet. Contrairement aux facets gérés par les locales, le destructeur de ce facet est public.
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 de la facette | 
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]
              
             
            
            
           | 
         
          retourne 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>
           
           )
          
          | 
        
| 
           
            
             
              
               [virtual]
              
             
            
            
           | 
         
          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]
              
             
            
            
           | 
         
          retourne 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
#include <cassert> #include <codecvt> #include <cstdint> #include <iostream> #include <locale> #include <string> int main() { std::string u8 = "z\u00df\u6c34\U0001f34c"; std::u16string u16 = u"z\u00df\u6c34\U0001f34c"; // UTF-8 to UTF-16/char16_t std::u16string u16_conv = std::wstring_convert< std::codecvt_utf8_utf16<char16_t>, char16_t>{}.from_bytes(u8); assert(u16 == u16_conv); std::cout << "UTF-8 to UTF-16 conversion produced " << u16_conv.size() << " code units:\n" << std::showbase << std::hex; for (char16_t c : u16_conv) std::cout << static_cast<std::uint16_t>(c) << ' '; // UTF-16/char16_t to UTF-8 std::string u8_conv = std::wstring_convert< std::codecvt_utf8_utf16<char16_t>, char16_t>{}.to_bytes(u16); assert(u8 == u8_conv); std::cout << "\nUTF-16 to UTF-8 conversion produced " << std::dec << u8_conv.size() << " bytes:\n" << std::hex; for (char c : u8_conv) std::cout << +static_cast<unsigned char>(c) << ' '; std::cout << '\n'; }
Sortie :
UTF-8 to UTF-16 conversion produced 5 code units: 0x7a 0xdf 0x6c34 0xd83c 0xdf4c UTF-16 to UTF-8 conversion produced 10 bytes: 0x7a 0xc3 0x9f 0xe6 0xb0 0xb4 0xf0 0x9f 0x8d 0x8c
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 publié | Comportement corrigé | 
|---|---|---|---|
| LWG 2229 | C++98 | le constructeur et le destructeur n'étaient pas spécifiés | les spécifie | 
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 > | 
| 
         convertit entre les encodages de caractères, y compris UTF-8, UTF-16, UTF-32
          (modèle de classe)  | 
       |
| 
          
           
            
             
              (C++11)
             
            
            
             
              (obsolète en C++17)
             
            
            
             
              (supprimé en C++26)
             
            
           
           
          | 
        
         balises pour modifier le comportement des facettes codecvt standard
          (énumération)  | 
       
| 
          
           
            
             
              (C++11)
             
            
            
             
              (obsolète en C++17)
             
            
            
             
              (supprimé en C++26)
             
            
           
           
          | 
        
         convertit entre UTF-8 et UCS-2/UCS-4
          (modèle de classe)  | 
       
| 
          
           
            
             
              (C++11)
             
            
            
             
              (obsolète en C++17)
             
            
            
             
              (supprimé en C++26)
             
            
           
           
          | 
        
         convertit entre UTF-16 et UCS-2/UCS-4
          (modèle de classe)  |