Partager via


La classe codecvt

Modèle de classe qui décrit un objet qui peut servir de facette de paramètres régionaux. Il peut contrôler les conversions entre une séquence de valeurs utilisée pour encoder des caractères dans le programme et une séquence de valeurs utilisées pour encoder des caractères en dehors du programme.

Syntaxe

template <class CharType, class Byte, class StateType>
class codecvt : public locale::facet, codecvt_base;

Paramètres

CharType
Type utilisé dans le cadre d'un programme pour encoder des caractères.

Byte
Type utilisé pour encoder des caractères en dehors d'un programme.

StateType
Type qui peut être utilisé pour représenter les états intermédiaires d'une conversion entre types internes et types externes de représentations de caractères.

Notes

Le modèle de classe décrit un objet qui peut servir de facette de paramètres régionaux, pour contrôler les conversions entre une séquence de valeurs de type CharType et une séquence de valeurs de type Byte. La classe StateType caractérise la transformation. Un objet de la classe StateType stocke toute information d'état nécessaire lors d'une conversion.

L'encodage interne utilise une représentation avec un nombre fixe d'octets par caractère, généralement de type char ou wchar_t.

Comme avec n'importe quelle facette de paramètres régionaux, l'objet statique id possède une valeur stockée initiale de zéro. La première tentative d’accès à sa valeur stockée entraîne le stockage d’une valeur positive unique dans id.

Les versions de modèle de do_in et do_out toujours renvoyées codecvt_base::noconv.

La bibliothèque C++ Standard définit plusieurs spécialisations explicites :

template<>
codecvt<wchar_t, char, mbstate_t>

effectue des conversions entre des séquences wchar_t et char.

template<>
codecvt<char16_t, char, mbstate_t>

effectue des conversions entre des séquences char16_t encodées au format UTF-16 et des séquences char encodées au format UTF-8.

template<>
codecvt<char32_t, char, mbstate_t>

effectue des conversions entre des séquences char32_t encodées au format UTF-32 (UCS-4) et des séquences char encodées au format UTF-8.

Constructeurs

Constructeur Description
codecvt Constructeur d'objets de la classe codecvt qui sert de facette de paramètres régionaux pour la gestion des conversions.

Typedefs

Nom de type Description
extern_type Type de caractère utilisé pour les représentations externes.
intern_type Type de caractère utilisé pour les représentations internes.
state_type Type de caractère utilisé pour représenter les états intermédiaires lors de conversions entre des représentations internes et externes.

Fonctions Membre

Fonction membre Description
always_noconv Vérifie si une conversion doit être effectuée.
do_always_noconv Fonction virtuelle appelée pour vérifier si une conversion doit être effectuée.
do_encoding Fonction virtuelle qui teste si l’encodage du flux dépend de Byte l’état, si le rapport entre les Byte valeurs utilisées et les CharType valeurs produites est constant et, le cas échéant, détermine la valeur de ce ratio.
do_in Fonction virtuelle appelée pour convertir une séquence de valeurs internes Byte en séquence de valeurs externes CharType .
do_length Fonction virtuelle qui détermine le nombre de Byte valeurs d’une séquence donnée de valeurs externes Byte ne produit pas plus qu’un nombre donné de valeurs internes CharType et retourne ce nombre de Byte valeurs.
do_max_length Fonction virtuelle qui retourne le nombre maximal d'octets externes nécessaires pour produire un CharType interne.
do_out Fonction virtuelle appelée pour convertir une séquence de valeurs internes CharType en séquence d’octets externes.
do_unshift Fonction virtuelle appelée pour fournir les Byte valeurs nécessaires dans une conversion dépendante de l’état pour terminer le dernier caractère dans une séquence de Byte valeurs.
encoding Teste si l’encodage du flux dépend de l’état Byte , si le rapport entre les Byte valeurs utilisées et les CharType valeurs produites est constant et, le cas échéant, détermine la valeur de ce ratio.
in Convertit une représentation externe d’une séquence de Byte valeurs en représentation interne d’une séquence de CharType valeurs.
length Détermine le nombre de Byte valeurs d’une séquence donnée de valeurs externes Byte qui ne produisent pas plus qu’un nombre donné de valeurs internes CharType et retourne ce nombre de Byte valeurs.
max_length Retourne le nombre maximal de valeurs externes Byte nécessaires à la production d’une valeur interne CharType.
out Convertit une séquence de valeurs internes CharType en une séquence de valeurs externes Byte .
unshift Fournit les valeurs externes Byte nécessaires dans une conversion dépendante de l’état pour terminer le dernier caractère dans la séquence de Byte valeurs.

Spécifications

En-tête : <locale>

Espace de noms : std

codecvt::always_noconv

Teste si aucune conversion n’a besoin d’être effectuée.

bool always_noconv() const throw();

Valeur de retour

Valeur booléenne qui est true si aucune conversion n’a besoin d’être effectuée ; false si au moins une doit être effectuée.

Notes

La fonction membre retourne do_always_noconv.

Exemple

// codecvt_always_noconv.cpp
// compile with: /EHsc
#include <locale>
#include <iostream>
using namespace std;

int main( )
{
   locale loc ( "German_Germany" );
   bool result1 = use_facet<codecvt<char, char, mbstate_t>>
      ( loc ).always_noconv( );

   if ( result1 )
      cout << "No conversion is needed." << '\n';
   else
      cout << "At least one conversion is required." << '\n';

   bool result2 = use_facet<codecvt<wchar_t, char, mbstate_t>>
      ( loc ).always_noconv( );

   if ( result2 )
      cout << "No conversion is needed." << '\n';
   else
      cout << "At least one conversion is required." << '\n';
}
No conversion is needed.
At least one conversion is required.

codecvt::codecvt

Constructeur d’objets de la classe codecvt qui sert de facette de paramètres régionaux pour la gestion des conversions.

explicit codecvt(size_t refs = 0);

Paramètres

refs
Valeur entière qui sert à spécifier le type de gestion de la mémoire pour l’objet.

Notes

Les valeurs possibles pour le paramètre refs et leur signification sont les suivantes :

  • 0 : la durée de vie de l’objet est gérée par les paramètres régionaux qui le contiennent.

  • 1 : la durée de vie de l’objet doit être gérée manuellement.

  • 2 : Ces valeurs ne sont pas définies.

Le constructeur initialise son locale::facet objet de base avec locale::facet(refs).

codecvt::do_always_noconv

Fonction virtuelle appelée pour tester si aucune conversion n’a besoin d’être effectuée.

virtual bool do_always_noconv() const throw();

Valeur de retour

La fonction membre virtuelle protégée retourne true uniquement si chaque appel à do_in ou do_out retour .noconv

La version du modèle retourne truetoujours .

Exemple

Consultez l’exemple pour always_noconv, qui appelle do_always_noconv.

codecvt::do_encoding

Fonction virtuelle qui teste si l’encodage du flux dépend de Byte l’état, si le rapport entre les Byte valeurs utilisées et les CharType valeurs produites est constant et, le cas échéant, détermine la valeur de ce ratio.

virtual int do_encoding() const throw();

Valeur de retour

La fonction membre virtuelle protégée retourne :

  • -1, si l’encodage des séquences de type extern_type dépend de l’état.

  • 0, si le codage implique des séquences de longueur variable.

  • N, si l’encodage implique uniquement des séquences de longueur N

Exemple

Consultez l’exemple relatif à encoding, qui appelle do_encoding.

codecvt ::d o_in

Fonction virtuelle appelée pour convertir une séquence de valeurs externes Byte en séquence de valeurs internes CharType .

virtual result do_in(
    StateType& state,
    const Byte* first1,
    const Byte* last1,
    const Byte*& next1,
    CharType* first2,
    CharType* last2,
    CharType*& next2,) const;

Paramètres

state
État de conversion conservé entre les appels à la fonction membre.

first1
Pointeur vers le début de la séquence à convertir.

last1
Pointeur vers la fin de la séquence à convertir.

next1
Pointeur situé après la fin de la séquence convertie, vers le premier caractère non converti.

first2
Pointeur vers le début de la séquence convertie.

last2
Pointeur vers la fin de la séquence convertie.

next2
Pointeur vers le CharType pointeur qui vient après la dernière conversion CharType, vers le premier caractère non modifié dans la séquence de destination.

Valeur de retour

Retour qui indique la réussite, la réussite partielle ou l’échec de l’opération. La fonction retourne :

  • codecvt_base::error si la séquence source est mal formée.

  • codecvt_base::noconv si la fonction n’exécute aucune conversion.

  • codecvt_base::ok si la conversion réussit.

  • codecvt_base::partial si la source est insuffisante ou si la destination n’est pas suffisamment grande, pour que la conversion réussisse.

Notes

state doit représenter l’état initial de la conversion au début d’une nouvelle séquence source. La fonction modifie sa valeur stockée selon les besoins pour refléter l’état actuel d’une conversion réussie. Sinon, sa valeur stockée n’est pas spécifiée.

Exemple

Consultez l’exemple pour in, qui appelle do_in.

codecvt::do_length

Fonction virtuelle qui détermine le nombre de Byte valeurs d’une séquence donnée de valeurs externes Byte ne produit pas plus qu’un nombre donné de valeurs internes CharType et retourne ce nombre de Byte valeurs.

virtual int do_length(
    const StateType& state,
    const Byte* first1,
    const Byte* last1,
    size_t len2) const;

Paramètres

state
État de conversion conservé entre les appels à la fonction membre.

first1
Pointeur vers le début de la séquence externe.

last1
Pointeur vers la fin de la séquence externe.

len2
Nombre maximal de Byte valeurs qui peuvent être retournées par la fonction membre.

Valeur de retour

Entier qui représente le nombre maximal de conversions, pas supérieur à len2, défini par la séquence source externe à [ first1, last1).

Notes

La fonction membre virtuelle protégée appelle do_in( state, first1, last1, next1, buf, buf + len2, next2) effectivement l’état (une copie d’état), une mémoire tampon bufet des next1 pointeurs et next2.

Elle retourne ensuite next2 - buf. Il compte le nombre maximal de conversions, pas supérieur à len2, défini par la séquence source à [ first1, last1).

La version du modèle retourne toujours la valeur la plus faible de last1 - first1 et .len2

Exemple

Consultez l’exemple pour length, qui appelle do_length.

codecvt::do_max_length

Fonction virtuelle qui retourne le nombre maximal de valeurs externes Byte nécessaires à la production d’une valeur interne CharType.

virtual int do_max_length() const throw();

Valeur de retour

Nombre maximal de Byte valeurs nécessaires pour produire un CharType.

Notes

La fonction membre virtuelle protégée retourne la plus grande valeur autorisée qui peut être retournée par do_length( first1, last1, 1) des valeurs valides arbitraires de first1 et last1.

Exemple

Consultez l’exemple pour max_length, qui appelle do_max_length.

codecvt::do_out

Fonction virtuelle appelée pour convertir une séquence de valeurs internes CharType en séquence de valeurs externes Byte .

virtual result do_out(
    StateType& state,
    const CharType* first1,
    const CharType* last1,
    const CharType*& next1,
    Byte* first2,
    Byte* last2,
    Byte*& next2) const;

Paramètres

state
État de conversion conservé entre les appels à la fonction membre.

first1
Pointeur vers le début de la séquence à convertir.

last1
Pointeur vers la fin de la séquence à convertir.

next1
Référence à un pointeur vers le premier non converti CharType, après la dernière CharType conversion.

first2
Pointeur vers le début de la séquence convertie.

last2
Pointeur vers la fin de la séquence convertie.

next2
Référence à un pointeur vers le premier non converti Byte, après la dernière Byte conversion.

Valeur de retour

La fonction retourne :

  • codecvt_base::error si la séquence source est mal formée.

  • codecvt_base::noconv si la fonction n’exécute aucune conversion.

  • codecvt_base::ok si la conversion réussit.

  • codecvt_base::partial si la source est insuffisante ou si la destination n’est pas suffisamment grande pour que la conversion réussisse.

Notes

state doit représenter l’état initial de la conversion au début d’une nouvelle séquence source. La fonction modifie sa valeur stockée selon les besoins pour refléter l’état actuel d’une conversion réussie. Sinon, sa valeur stockée n’est pas spécifiée.

Exemple

Consultez l’exemple relatif à out, qui appelle do_out.

codecvt::do_unshift

Fonction virtuelle appelée pour fournir les Byte valeurs nécessaires dans une conversion dépendante de l’état pour terminer le dernier caractère dans une séquence de Byte valeurs.

virtual result do_unshift(
    StateType& state,
    Byte* first2,
    Byte* last2,
    Byte*& next2) const;

Paramètres

state
État de conversion conservé entre les appels à la fonction membre.

first2
Pointeur vers la première position dans la plage de destination.

last2
Pointeur vers la dernière position dans la plage de destination.

next2
Pointeur vers le premier élément non modifié dans la séquence de destination.

Valeur de retour

La fonction retourne :

  • codecvt_base::error si l’état représente un état non valide

  • codecvt_base::noconv si la fonction n’exécute aucune conversion

  • codecvt_base::ok si la conversion réussit

  • codecvt_base::partial si la destination n’est pas suffisamment grande pour que la conversion réussisse

Notes

La fonction membre virtuelle protégée tente de convertir l’élément CharTypesource (0) en séquence de destination qu’elle stocke dans [ first2, à last2l’exception de l’élément Bytede fin (0). Elle stocke toujours dans next2 un pointeur vers le premier élément non modifié dans la séquence de destination.

State doit représenter l’état initial de la conversion au début d’une nouvelle séquence source. La fonction modifie sa valeur stockée selon les besoins pour refléter l’état actuel d’une conversion réussie. En règle générale, la conversion de l’élément CharTypesource (0) laisse l’état actuel dans l’état de conversion initial.

Exemple

Consultez l’exemple pour unshift, qui appelle do_unshift.

codecvt::encoding

Teste si l’encodage du flux dépend de l’état Byte , si le rapport entre les Byte valeurs utilisées et les CharType valeurs produites est constant et, le cas échéant, détermine la valeur de ce ratio.

int encoding() const throw();

Valeur de retour

Si la valeur de retour est positive, cette valeur correspond au nombre constant de Byte caractères requis pour produire le CharType caractère.

La fonction membre virtuelle protégée retourne :

  • -1, si l’encodage des séquences de type extern_type dépend de l’état.

  • 0, si le codage implique des séquences de longueur variable.

  • N, si l’encodage implique uniquement des séquences de longueur N.

Notes

La fonction membre retourne do_encoding.

Exemple

// codecvt_encoding.cpp
// compile with: /EHsc
#include <locale>
#include <iostream>
using namespace std;

int main( )
{
   locale loc ( "German_Germany" );
   int result1 = use_facet<codecvt<char, char, mbstate_t>> ( loc ).encoding ( );
   cout << result1 << '\n';
   result1 = use_facet<codecvt<wchar_t, char, mbstate_t>> ( loc ).encoding( );
   cout << result1 << '\n';
   result1 = use_facet<codecvt<char, wchar_t, mbstate_t>> ( loc ).encoding( );
   cout << result1 << '\n';
}
1
1
1

codecvt::extern_type

Type de caractère utilisé pour les représentations externes.

typedef Byte extern_type;

Notes

Le type est un synonyme du paramètre de modèle Byte.

codecvt ::in

Convertit une représentation externe d’une séquence de Byte valeurs en représentation interne d’une séquence de CharType valeurs.

result in(
    StateType& state,
    const Byte* first1,
    const Byte* last1,
    const Byte*& next1,
    CharType* first2,
    CharType* last2,
    CharType*& next2,) const;

Paramètres

state
État de conversion conservé entre les appels à la fonction membre.

first1
Pointeur vers le début de la séquence à convertir.

last1
Pointeur vers la fin de la séquence à convertir.

next1
Pointeur situé après la fin de la séquence convertie, vers le premier caractère non converti.

first2
Pointeur vers le début de la séquence convertie.

last2
Pointeur vers la fin de la séquence convertie.

next2
Pointeur vers le CharType pointeur qui vient après la dernière conversion Chartype en premier caractère non modifié dans la séquence de destination.

Valeur de retour

Retour qui indique la réussite, la réussite partielle ou l’échec de l’opération. La fonction retourne :

  • codecvt_base::error si la séquence source est mal formée.

  • codecvt_base::noconv si la fonction n’exécute aucune conversion.

  • codecvt_base::ok si la conversion réussit.

  • codecvt_base::partial si la source est insuffisante ou si la destination n’est pas suffisamment grande pour que la conversion réussisse.

Notes

state doit représenter l’état initial de la conversion au début d’une nouvelle séquence source. La fonction modifie sa valeur stockée selon les besoins pour refléter l’état actuel d’une conversion réussie. Après une conversion partielle, state doit être défini pour permettre à la conversion de reprendre quand de nouveaux caractères arrivent.

La fonction membre retourne do_in( state, first1, last1, next1, first2, last2, next2).

Exemple

// codecvt_in.cpp
// compile with: /EHsc
#define _INTL
#include <locale>
#include <iostream>
using namespace std;
#define LEN 90
int main( )
{
   const char* pszExt = "This is the string to be converted!";
   wchar_t pwszInt [LEN+1];
   memset(&pwszInt[0], 0, (sizeof(wchar_t))*(LEN+1));
   const char* pszNext;
   wchar_t* pwszNext;
   mbstate_t state = {0}; // zero-initialization represents the initial conversion state for mbstate_t
   locale loc("C");//English_Britain");//German_Germany
   int res = use_facet<codecvt<wchar_t, char, mbstate_t>>
     ( loc ).in( state,
          pszExt, &pszExt[strlen(pszExt)], pszNext,
          pwszInt, &pwszInt[strlen(pszExt)], pwszNext );
   pwszInt[strlen(pszExt)] = 0;
   wcout << ( res!=codecvt_base::error ?  L"It worked! " : L"It didn't work! " )
       << L"The converted string is:\n ["
       << &pwszInt[0]
       << L"]" << '\n';
   exit(-1);
}
It worked! The converted string is:
[This is the string to be converted!]

codecvt::intern_type

Type de caractère utilisé pour les représentations internes.

typedef CharType intern_type;

Notes

Le type est un synonyme du paramètre de modèle CharType.

codecvt ::length

Détermine le nombre de Byte valeurs d’une séquence donnée de valeurs externes Byte qui ne produisent pas plus qu’un nombre donné de valeurs internes CharType et retourne ce nombre de Byte valeurs.

int length(
    const StateType& state,
    const Byte* first1,
    const Byte* last1,
    size_t len2) const;

Paramètres

state
État de conversion conservé entre les appels à la fonction membre.

first1
Pointeur vers le début de la séquence externe.

last1
Pointeur vers la fin de la séquence externe.

len2
Nombre maximal d’objets Byte qui peuvent être retournés par la fonction membre.

Valeur de retour

Entier qui représente le nombre maximal de conversions, non supérieur à len2, défini par la séquence source externe sur [ first1, last1).

Notes

La fonction membre retourne do_length( state, first1, last1, len2).

Exemple

// codecvt_length.cpp
// compile with: /EHsc
#define _INTL
#include <locale>
#include <iostream>
using namespace std;
#define LEN 90
int main( )
{
   const char* pszExt = "This is the string whose length is to be measured!";
   mbstate_t state = {0}; // zero-initialization represents the initial conversion state for mbstate_t
   locale loc("C"); // English_Britain"); //German_Germany
   int res = use_facet<codecvt<wchar_t, char, mbstate_t>>
     ( loc ).length( state,
          pszExt, &pszExt[strlen(pszExt)], LEN );
   cout << "The length of the string is: ";
   wcout << res;
   cout << "." << '\n';
   exit(-1);
}
The length of the string is: 50.

codecvt::max_length

Retourne le nombre maximal de valeurs externes Byte nécessaires à la production d’une valeur interne CharType.

int max_length() const throw();

Valeur de retour

Nombre maximal de Byte valeurs nécessaires pour produire un CharType.

Notes

La fonction membre retourne do_max_length.

Exemple

// codecvt_max_length.cpp
// compile with: /EHsc
#define _INTL
#include <locale>
#include <iostream>
using namespace std;

int main( )
{
   locale loc( "C");//English_Britain" );//German_Germany
   int res = use_facet<codecvt<char, char, mbstate_t>>
     ( loc ).max_length( );
   wcout << res << '\n';
}
1

codecvt::out

Convertit une séquence de valeurs internes CharType en une séquence de valeurs externes Byte .

result out(
    StateType& state,
    const CharType* first1,
    const CharType* last1,
    const CharType*& next1,
    Byte* first2,
    Byte* last2,
    Byte*& next2) const;

Paramètres

state
État de conversion conservé entre les appels à la fonction membre.

first1
Pointeur vers le début de la séquence à convertir.

last1
Pointeur vers la fin de la séquence à convertir.

next1
Référence à un pointeur vers le premier non converti CharType après la dernière CharType conversion.

first2
Pointeur vers le début de la séquence convertie.

last2
Pointeur vers la fin de la séquence convertie.

next2
Référence à un pointeur vers le premier non converti Byte après la dernière conversion Byte.

Valeur de retour

La fonction membre retourne do_out( state, first1, last1, next1, first2, last2, next2).

Notes

Pour plus d’informations, consultez codecvt::do_out.

Exemple

// codecvt_out.cpp
// compile with: /EHsc
#define _INTL
#include <locale>
#include <iostream>
#include <wchar.h>
using namespace std;
#define LEN 90
int main( )
{
    char pszExt[LEN + 1];
    const wchar_t* pwszInt = L"This is the wchar_t string to be converted.";
    memset(&pszExt[0], 0, (sizeof(char)) * (LEN + 1));
    char* pszNext;
    const wchar_t* pwszNext;
    mbstate_t state;
    locale loc("C");//English_Britain");//German_Germany
    int res = use_facet<codecvt<wchar_t, char, mbstate_t>>
        (loc).out(state,
            pwszInt, &pwszInt[wcslen(pwszInt)], pwszNext,
            pszExt, &pszExt[wcslen(pwszInt)], pszNext);
    pszExt[wcslen(pwszInt)] = 0;
    cout << (res != codecvt_base::error ? "It worked: " : "It didn't work: ")
        << "The converted string is:\n ["
        << &pszExt[0]
        << "]" << '\n';

}
It worked: The converted string is:
[This is the wchar_t string to be converted.]

codecvt::state_type

Type de caractère utilisé pour représenter les états intermédiaires lors de conversions entre des représentations internes et externes.

typedef StateType state_type;

Notes

Le type est un synonyme du paramètre de modèle StateType.

codecvt ::unshift

Fournit les Byte valeurs nécessaires dans une conversion dépendante de l’état pour terminer le dernier caractère dans une séquence de Byte valeurs.

result unshift(
    StateType& state,
    Byte* first2,
    Byte* last2,
    Byte*& next2) const;

Paramètres

state
État de conversion conservé entre les appels à la fonction membre.

first2
Pointeur vers la première position dans la plage de destination.

last2
Pointeur vers la dernière position dans la plage de destination.

next2
Pointeur vers le premier élément non modifié dans la séquence de destination.

Valeur de retour

La fonction retourne :

  • codecvt_base::error si l’état représente un état non valide.

  • codecvt_base::noconv si la fonction n’exécute aucune conversion.

  • codecvt_base::ok si la conversion réussit.

  • codecvt_base::partial si la destination n’est pas suffisamment grande pour que la conversion réussisse.

Notes

La fonction membre virtuelle protégée tente de convertir l’élément CharTypesource (0) en séquence de destination qu’elle stocke dans [ first2, à last2l’exception de l’élément Bytede fin (0). Elle stocke toujours dans next2 un pointeur vers le premier élément non modifié dans la séquence de destination.

state doit représenter l’état initial de la conversion au début d’une nouvelle séquence source. La fonction modifie sa valeur stockée selon les besoins pour refléter l’état actuel d’une conversion réussie. En règle générale, la conversion de l’élément CharTypesource (0) laisse l’état actuel dans l’état de conversion initial.

La fonction membre retourne do_unshift( state, first2, last2, next2 ).

Voir aussi

<locale>
Pages de codes
Chaînes relatives aux noms des paramètres régionaux, aux langues et au pays/à la région
Sécurité des threads dans la bibliothèque C++ Standard