Clase codecvt
Plantilla de clase que describe un objeto que puede actuar como faceta de configuración regional. Puede controlar las conversiones entre una secuencia de valores usados para codificar caracteres dentro del programa y una secuencia de valores usados para codificar caracteres fuera del programa.
Sintaxis
template <class CharType, class Byte, class StateType>
class codecvt : public locale::facet, codecvt_base;
Parámetros
CharType
Tipo usado dentro de un programa para codificar caracteres.
Byte
Tipo usado para codificar caracteres fuera de un programa.
StateType
Tipo que se puede usar para representar los estados intermedios de una conversión entre los tipos internos y externos de representaciones de caracteres.
Comentarios
La plantilla de clase describe un objeto que puede actuar como faceta de configuración regional para controlar las conversiones entre una secuencia de valores de tipo CharType
y una secuencia de valores de tipo Byte
. La clase StateType
caracteriza la transformación y un objeto de clase StateType
almacena la información de estado necesaria durante una conversión.
La codificación interna emplea una representación con un número fijo de bytes por carácter, normalmente de tipo char
o de tipo wchar_t
.
Como ocurre con cualquier faceta de configuración regional, el id
de objeto estático tiene un valor almacenado inicial de cero. El primer intento de acceso a su valor almacenado almacena un valor positivo único en id
.
Las versiones de plantilla de do_in
y do_out
siempre devuelven codecvt_base::noconv
.
La biblioteca estándar de C++ define varias especializaciones explícitas:
template<>
codecvt<wchar_t, char, mbstate_t>
convierte entre secuencias wchar_t
y char
.
template<>
codecvt<char16_t, char, mbstate_t>
convierte entre secuencias char16_t
codificadas como UTF-16 y secuencias char
codificadas como UTF-8.
template<>
codecvt<char32_t, char, mbstate_t>
convierte entre secuencias char32_t
codificadas como UTF-32 (UCS-4) y secuencias char
codificadas como UTF-8.
Constructores
Constructor | Descripción |
---|---|
codecvt |
Constructor de objetos de clase codecvt que actúa como faceta de configuración regional para controlar las conversiones. |
Typedefs
Nombre de tipo | Descripción |
---|---|
extern_type |
Tipo de carácter que se usa para las representaciones externas. |
intern_type |
Tipo de carácter que se usa para las representaciones internas. |
state_type |
Tipo de carácter que se usa para representar los estados intermedios durante las conversiones entre las representaciones internas y externas. |
Funciones miembro
Función de miembro | Descripción |
---|---|
always_noconv |
Comprueba si no es necesario realizar ninguna conversión. |
do_always_noconv |
Función virtual a la que se llama para comprobar si no es necesario realizar ninguna conversión. |
do_encoding |
Función virtual que comprueba si la codificación del flujo Byte depende del estado, si la relación entre los valores Byte usados y los valores CharType generados es constante y, en tal caso, determina el valor de esa relación. |
do_in |
Función virtual a la que se llama para convertir una secuencia de valores Byte internos en una secuencia de valores CharType externos. |
do_length |
Función virtual que determina cuántos valores Byte de una secuencia determinada de valores Byte externos generan no más de un número determinado de valores CharType internos y devuelve ese número de valores Byte . |
do_max_length |
Función virtual que devuelve el número máximo de bytes externos necesarios para generar un CharType interno. |
do_out |
Función virtual a la que se llama para convertir una secuencia de valores CharType internos en una secuencia de bytes externos. |
do_unshift |
Función virtual a la que se llama para proporcionar los valores Byte necesarios en una conversión dependiente del estado para completar el último carácter de una secuencia de valores Byte . |
encoding |
Comprueba si la codificación del flujo Byte depende del estado, si la relación entre los valores Byte usados y los valores CharType generados es constante y, en tal caso, determina el valor de esa relación. |
in |
Convierte una representación externa de una secuencia de valores Byte en una representación interna de una secuencia de valores CharType . |
length |
Determina cuántos valores Byte de una secuencia determinada de valores Byte externos generan no más de un número determinado de valores CharType internos y devuelve ese número de valores Byte . |
max_length |
Devuelve el número máximo de valores Byte externos necesarios para generar un CharType interno. |
out |
Convierte una secuencia de valores CharType internos en una secuencia de valores Byte externos. |
unshift |
Proporciona los valores Byte externos necesarios en una conversión dependiente del estado para completar el último carácter de la secuencia de valores Byte . |
Requisitos
Encabezado: <locale>
Espacio de nombres: std
codecvt::always_noconv
Comprueba si no es necesario realizar ninguna conversión.
bool always_noconv() const throw();
Valor devuelto
Un valor booleano que es true
si es no necesario realizar ninguna conversión; false
si se debe realizar al menos una.
Comentarios
La función miembro devuelve do_always_noconv
.
Ejemplo
// 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
Constructor de objetos de clase codecvt que actúa como faceta de configuración regional para controlar las conversiones.
explicit codecvt(size_t refs = 0);
Parámetros
refs
Valor entero que se usa para especificar el tipo de administración de memoria del objeto.
Comentarios
Los valores posibles del parámetro refs
y su importancia son:
0: la vigencia del objeto se administra mediante las configuraciones regionales que lo contienen.
1: la vigencia del objeto se debe administrar de manera manual.
2: estos valores no están definidos.
El constructor inicializa su objeto base locale::facet
con locale::facet
(refs)
.
codecvt::do_always_noconv
Función virtual a la que se llama para comprobar si no es necesario realizar ninguna conversión.
virtual bool do_always_noconv() const throw();
Valor devuelto
La función miembro virtual protegida devuelve true
solo si todas las llamadas a do_in
o do_out
devuelven noconv
.
La versión de plantilla devuelve siempre true
.
Ejemplo
Vea el ejemplo de always_noconv
, que llama a do_always_noconv
.
codecvt::do_encoding
Función virtual que comprueba si la codificación del flujo Byte
depende del estado, si la relación entre los valores Byte
usados y los valores CharType
generados es constante y, en tal caso, determina el valor de esa relación.
virtual int do_encoding() const throw();
Valor devuelto
La función miembro virtual protegida devuelve:
-1, si la codificación de secuencias de tipo
extern_type
depende del estado.0, si la codificación implica secuencias de longitud variable.
N
, si la codificación implica solo secuencias de longitudN
.
Ejemplo
Vea el ejemplo de encoding, que llama a do_encoding
.
codecvt::d o_in
Función virtual a la que se llama para convertir una secuencia de valores Byte
externos en una secuencia de valores CharType
internos.
virtual result do_in(
StateType& state,
const Byte* first1,
const Byte* last1,
const Byte*& next1,
CharType* first2,
CharType* last2,
CharType*& next2,) const;
Parámetros
state
El estado de conversión que se mantiene entre las llamadas a la función miembro.
first1
Puntero al principio de la secuencia que se va a convertir.
last1
Puntero al final de la secuencia que se va a convertir.
next1
Puntero más allá del final de la secuencia convertida, al primer carácter sin convertir.
first2
Puntero al principio de la secuencia convertida.
last2
Puntero al final de la secuencia convertida.
next2
Puntero al CharType
que viene después del último CharType
convertido, hasta el primer carácter sin modificaciones en la secuencia de destino.
Valor devuelto
Un valor devuelto que indica si la operación se ha realizado correctamente, parcialmente o no se ha realizado correctamente. La función devuelve:
codecvt_base::error
si la secuencia de origen tiene un formato incorrecto.codecvt_base::noconv
si la función no realiza ninguna conversión.codecvt_base::ok
si la conversión se realiza correctamente.codecvt_base::partial
si el origen no es suficiente o si el destino no es lo suficientemente grande para que la conversión se realice correctamente.
Comentarios
state
debe representar el estado de conversión inicial al principio de una nueva secuencia de origen. La función modifica su valor almacenado según sea necesario para reflejar el estado actual de una conversión correcta. De lo contrario, su valor almacenado no se especifica.
Ejemplo
Vea el ejemplo de in
, que llama a do_in
.
codecvt::do_length
Función virtual que determina cuántos valores Byte
de una secuencia determinada de valores Byte
externos generan no más de un número determinado de valores CharType
internos y devuelve ese número de valores Byte
.
virtual int do_length(
const StateType& state,
const Byte* first1,
const Byte* last1,
size_t len2) const;
Parámetros
state
El estado de conversión que se mantiene entre las llamadas a la función miembro.
first1
Puntero al principio de la secuencia externa.
last1
Puntero al final de la secuencia externa.
len2
El número máximo de valores Byte
que puede devolver la función miembro.
Valor devuelto
Un entero que representa el número máximo de conversiones, no mayor que len2, definido por la secuencia de origen externo en [first1
, last1
).
Comentarios
La función miembro virtual protegida llama a do_in( state, first1, last1, next1, buf, buf + len2, next2)
para state (una copia del estado), algún búfer buf
y punteros next1
y next2
.
Después, devuelve next2
- buf
. Cuenta el número máximo de conversiones, no mayor que len2, definido por la secuencia de origen en [first1
, last1
).
La versión de plantilla devuelve siempre el menor de last1
- first1
y len2
.
Ejemplo
Vea el ejemplo de length
, que llama a do_length
.
codecvt::do_max_length
Función virtual que devuelve el número máximo de valores Byte
externos necesarios para generar un CharType
interno.
virtual int do_max_length() const throw();
Valor devuelto
El número máximo de valores Byte
necesarios para generar un CharType
.
Comentarios
La función miembro virtual protegida devuelve el mayor valor posible que puede devolver do_length
( first1, last1, 1)
para los valores válidos arbitrarios de first1
y last1
.
Ejemplo
Vea el ejemplo de max_length
, que llama a do_max_length
.
codecvt::do_out
Función virtual a la que se llama para convertir una secuencia de valores CharType
internos en una secuencia de valores Byte
externos.
virtual result do_out(
StateType& state,
const CharType* first1,
const CharType* last1,
const CharType*& next1,
Byte* first2,
Byte* last2,
Byte*& next2) const;
Parámetros
state
El estado de conversión que se mantiene entre las llamadas a la función miembro.
first1
Puntero al principio de la secuencia que se va a convertir.
last1
Puntero al final de la secuencia que se va a convertir.
next1
Referencia a un puntero al primer CharType
sin convertir, después del último CharType
convertido.
first2
Puntero al principio de la secuencia convertida.
last2
Puntero al final de la secuencia convertida.
next2
Referencia a un puntero al primer Byte
sin convertir, después del último Byte
convertido.
Valor devuelto
La función devuelve:
codecvt_base::error
si la secuencia de origen tiene un formato incorrecto.codecvt_base::noconv
si la función no realiza ninguna conversión.codecvt_base::ok
si la conversión se realiza correctamente.codecvt_base::partial
si el origen no es suficiente o si el destino no es lo suficientemente grande para que la conversión se realice correctamente.
Comentarios
state
debe representar el estado de conversión inicial al principio de una nueva secuencia de origen. La función modifica su valor almacenado según sea necesario para reflejar el estado actual de una conversión correcta. De lo contrario, su valor almacenado no se especifica.
Ejemplo
Vea el ejemplo de out, que llama a do_out
.
codecvt::do_unshift
Función virtual a la que se llama para proporcionar los valores Byte
necesarios en una conversión dependiente del estado para completar el último carácter de una secuencia de valores Byte
.
virtual result do_unshift(
StateType& state,
Byte* first2,
Byte* last2,
Byte*& next2) const;
Parámetros
state
El estado de conversión que se mantiene entre las llamadas a la función miembro.
first2
Puntero a la primera posición del intervalo de destino.
last2
Puntero a la última posición del intervalo de destino.
next2
Puntero al primer elemento sin modificaciones en la secuencia de destino.
Valor devuelto
La función devuelve:
codecvt_base::error
si state representa un estado no válido.codecvt_base::noconv
si la función no realiza ninguna conversióncodecvt_base::ok
si la conversión se realiza correctamente.codecvt_base::partial
si el destino no es lo bastante grande para que la conversión se realice correctamente.
Comentarios
La función miembro virtual protegida intenta convertir el elemento de origen CharType
(0) en una secuencia de destino que almacena en [first2
, last2
), excepto el elemento que finaliza Byte
(0). Siempre almacena en next2
un puntero al primer elemento sin modificaciones en la secuencia de destino.
State
debe representar el estado de conversión inicial al principio de una nueva secuencia de origen. La función modifica su valor almacenado según sea necesario para reflejar el estado actual de una conversión correcta. Normalmente, al convertir el elemento de origen CharType
(0), el estado actual queda en el estado de conversión inicial.
Ejemplo
Vea el ejemplo de unshift
, que llama a do_unshift
.
codecvt::encoding
Comprueba si la codificación del flujo Byte
depende del estado, si la relación entre los valores Byte
usados y los valores CharType
generados es constante y, en tal caso, determina el valor de esa relación.
int encoding() const throw();
Valor devuelto
Si el valor devuelto es positivo, ese valor es el número constante de caracteres Byte
necesarios para producir el carácter CharType
.
La función miembro virtual protegida devuelve:
-1, si la codificación de secuencias de tipo
extern_type
depende del estado.0, si la codificación implica secuencias de longitud variable.
N
, si la codificación implica solo secuencias de longitudN
.
Comentarios
La función miembro devuelve do_encoding.
Ejemplo
// 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
Tipo de carácter que se usa para las representaciones externas.
typedef Byte extern_type;
Comentarios
El tipo es un sinónimo del parámetro de plantilla Byte
.
codecvt::in
Convierte una representación externa de una secuencia de valores Byte
en una representación interna de una secuencia de valores CharType
.
result in(
StateType& state,
const Byte* first1,
const Byte* last1,
const Byte*& next1,
CharType* first2,
CharType* last2,
CharType*& next2,) const;
Parámetros
state
El estado de conversión que se mantiene entre las llamadas a la función miembro.
first1
Puntero al principio de la secuencia que se va a convertir.
last1
Puntero al final de la secuencia que se va a convertir.
next1
Puntero más allá del final de la secuencia convertida, al primer carácter sin convertir.
first2
Puntero al principio de la secuencia convertida.
last2
Puntero al final de la secuencia convertida.
next2
Puntero al CharType
que viene después del último Chartype
convertido, hasta el primer carácter sin modificaciones en la secuencia de destino.
Valor devuelto
Un valor devuelto que indica si la operación se ha realizado correctamente, parcialmente o no se ha realizado correctamente. La función devuelve:
codecvt_base::error
si la secuencia de origen tiene un formato incorrecto.codecvt_base::noconv
si la función no realiza ninguna conversión.codecvt_base::ok
si la conversión se realiza correctamente.codecvt_base::partial
si el origen no es suficiente o si el destino no es lo suficientemente grande para que la conversión se realice correctamente.
Comentarios
state
debe representar el estado de conversión inicial al principio de una nueva secuencia de origen. La función modifica su valor almacenado según sea necesario para reflejar el estado actual de una conversión correcta. Después de una conversión parcial, state
debe establecerse de tal modo que permita que la conversión se reanude cuando lleguen nuevos caracteres.
La función miembro devuelve do_in
( state, first1, last1, next1, first2, last2, next2)
.
Ejemplo
// 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
Tipo de carácter que se usa para las representaciones internas.
typedef CharType intern_type;
Comentarios
El tipo es un sinónimo del parámetro de plantilla CharType
.
codecvt::length
Determina cuántos valores Byte
de una secuencia determinada de valores Byte
externos generan no más de un número determinado de valores CharType
internos y devuelve ese número de valores Byte
.
int length(
const StateType& state,
const Byte* first1,
const Byte* last1,
size_t len2) const;
Parámetros
state
El estado de conversión que se mantiene entre las llamadas a la función miembro.
first1
Puntero al principio de la secuencia externa.
last1
Puntero al final de la secuencia externa.
len2
El número máximo de Bytes que puede devolver la función miembro.
Valor devuelto
Un entero que representa el número máximo de conversiones, no mayor que len2
, definido por la secuencia de origen externo en [ first1
, last1
).
Comentarios
La función miembro devuelve do_length
( state, first1, last1, len2)
.
Ejemplo
// 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
Devuelve el número máximo de valores Byte
externos necesarios para generar un CharType
interno.
int max_length() const throw();
Valor devuelto
El número máximo de valores Byte
necesarios para generar un CharType
.
Comentarios
La función miembro devuelve do_max_length
.
Ejemplo
// 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
Convierte una secuencia de valores CharType
internos en una secuencia de valores Byte
externos.
result out(
StateType& state,
const CharType* first1,
const CharType* last1,
const CharType*& next1,
Byte* first2,
Byte* last2,
Byte*& next2) const;
Parámetros
state
El estado de conversión que se mantiene entre las llamadas a la función miembro.
first1
Puntero al principio de la secuencia que se va a convertir.
last1
Puntero al final de la secuencia que se va a convertir.
next1
Referencia a un puntero al primer CharType
sin convertir, después del último CharType
convertido.
first2
Puntero al principio de la secuencia convertida.
last2
Puntero al final de la secuencia convertida.
next2
Referencia a un puntero al primer Byte
sin convertir, después del último Byte
convertido.
Valor devuelto
La función miembro devuelve do_out
( state, first1, last1, next1, first2, last2, next2)
.
Comentarios
Para obtener más información, vea codecvt::do_out
.
Ejemplo
// 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
Tipo de carácter que se usa para representar los estados intermedios durante las conversiones entre las representaciones internas y externas.
typedef StateType state_type;
Comentarios
El tipo es un sinónimo del parámetro de plantilla StateType
.
codecvt::unshift
Proporciona los valores Byte
necesarios en una conversión dependiente del estado para completar el último carácter de una secuencia de valores Byte
.
result unshift(
StateType& state,
Byte* first2,
Byte* last2,
Byte*& next2) const;
Parámetros
state
El estado de conversión que se mantiene entre las llamadas a la función miembro.
first2
Puntero a la primera posición del intervalo de destino.
last2
Puntero a la última posición del intervalo de destino.
next2
Puntero al primer elemento sin modificaciones en la secuencia de destino.
Valor devuelto
La función devuelve:
codecvt_base::error
si el estado representa un estado no válido.codecvt_base::noconv
si la función no realiza ninguna conversión.codecvt_base::ok
si la conversión se realiza correctamente.codecvt_base::partial
si el destino no es lo bastante grande para que la conversión se realice correctamente.
Comentarios
La función miembro virtual protegida intenta convertir el elemento de origen CharType
(0) en una secuencia de destino que almacena en [first2
, last2
), excepto el elemento que finaliza Byte
(0). Siempre almacena en next2
un puntero al primer elemento sin modificaciones en la secuencia de destino.
state
debe representar el estado de conversión inicial al principio de una nueva secuencia de origen. La función modifica su valor almacenado según sea necesario para reflejar el estado actual de una conversión correcta. Normalmente, al convertir el elemento de origen CharType
(0), el estado actual queda en el estado de conversión inicial.
La función miembro devuelve do_unshift
( state, first2, last2, next2 )
.
Consulte también
<locale>
Páginas de códigos
Nombres de configuración regional, idiomas y cadenas de país/región
Seguridad para subprocesos en la biblioteca estándar de C++