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 true
toujours .
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 longueurN
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 buf
et 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 validecodecvt_base::noconv
si la fonction n’exécute aucune conversioncodecvt_base::ok
si la conversion réussitcodecvt_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 CharType
source (0) en séquence de destination qu’elle stocke dans [ first2
, à last2
l’exception de l’élément Byte
de 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 CharType
source (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 longueurN
.
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 CharType
source (0) en séquence de destination qu’elle stocke dans [ first2
, à last2
l’exception de l’élément Byte
de 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 CharType
source (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