std:: codecvt_utf16
| 
           
           Défini dans l'en-tête
            
         
            
             <codecvt>
            
           
           | 
         ||
| 
           
           
            
             template
            
            
             <
            
             
         
             
              class
             
             Elem,
               | 
         
          
           (depuis C++11)
          
           (déprécié en C++17) (supprimé en C++26)  | 
        |
       
        std::codecvt_utf16
       
       est une facette
       
        
         std::codecvt
        
       
       qui encapsule la conversion entre une chaîne d'octets encodée en UTF-16 et une chaîne de caractères UCS-2 ou UTF-32 (selon le type de
       
        Elem
       
       ). Cette facette
       
        
         std::codecvt
        
       
       peut être utilisée pour lire et écrire des fichiers UTF-16 en mode binaire.
      
UCS-2 est un encodage archaïque qui est un sous-ensemble de UTF-16, lequel encode uniquement les valeurs scalaires dans la plage U+0000-U+FFFF (Plan Multilingue de Base).
         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 cette facette pourra lire ou écrire sans erreur
         | 
       
| Mode | - | une constante de type std::codecvt_mode | 
Fonctions membres
| 
          
           
            
             
              (constructeur)
             
            
           
           
          | 
        
         construit une nouvelle facette
         
          codecvt_utf16
         
         (fonction membre publique)  | 
       
| 
          
           
            
             
              (destructeur)
             
            
           
           
          | 
        
         détruit une facette
         
          codecvt_utf16
         
         (fonction membre publique)  | 
       
std::codecvt_utf16:: codecvt_utf16
| 
            
            
             
              explicit
             
             codecvt_utf16
             
              (
             
             
              
               std::
               
                size_t
               
              
             
             refs
             
              =
             
             
              0
             
             
              )
             
             
              ;
             
            
            
           | 
          ||
        Construit un nouveau facet
        
         std::codecvt_utf16
        
        et transmet le compteur de références initial
        
         
          refs
         
        
        à la classe de base.
       
Paramètres
| refs | - | le nombre de références liées au facet | 
std::codecvt_utf16:: ~codecvt_utf16
| 
            
            
             ~codecvt_utf16
             
              (
             
             
              )
             
             
              ;
             
            
            
           | 
          ||
Détruit le facet. Contrairement aux facets gérés par la locale, 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 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]
              
             
            
            
           | 
         
          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 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 requise, les types d'entrée et de sortie sont identiques | 
Notes
       Bien que la norme exige que cette facette fonctionne avec UCS-2 lorsque la taille de
       
        Elem
       
       est de 16 bits, certaines implémentations utilisent UTF-16 à la place, ce qui en fait une locale non convertissante. Le terme "UCS-2" a été déprécié et retiré de l'ISO 10646.
      
Exemple
L'exemple suivant illustre le décodage d'un fichier UTF-16le sur un système avec un wchar_t de 32 bits. Sur un système avec un wchar_t de 16 bits, le décodage du troisième caractère échouera car std :: codecvt_utf16 < char16_t > produit de l'UCS-2, pas de l'UTF-16.
#include <codecvt> #include <cwchar> #include <fstream> #include <iostream> #include <locale> #include <string> void prepare_file() { // UTF-16le data (if host system is little-endian) char16_t utf16le[4] = {0x007a, // latin small letter 'z' U+007a 0x6c34, // CJK ideograph "water" U+6c34 0xd834, 0xdd0b}; // musical sign segno U+1d10b // store in a file std::ofstream fout("text.txt"); fout.write(reinterpret_cast<char*>(utf16le), sizeof utf16le); } int main() { prepare_file(); // open as a byte stream std::wifstream fin("text.txt", std::ios::binary); // apply facet fin.imbue(std::locale(fin.getloc(), new std::codecvt_utf16<wchar_t, 0x10ffff, std::little_endian>)); wchar_t c = 0; for (std::cout << std::showbase << std::hex; fin.get(c); std::cout << static_cast<std::wint_t>(c) << '\n'); }
Sortie :
0x7a 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 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-8 et UTF-16
          (modèle de classe)  |