Namespaces
Variants

std:: codecvt_byname

From cppreference.net
Definido en el encabezado <locale>
template < class InternT, class ExternT, class State >
class codecvt_byname : public std:: codecvt < InternT, ExternT, State > ;

std::codecvt_byname es una faceta std::codecvt que encapsula las reglas de conversión de caracteres multibyte/ancho de una configuración regional especificada en su construcción.

Contenidos

Especializaciones

La biblioteca estándar garantiza proporcionar las siguientes especializaciones:

Definido en el encabezado <locale>
std :: codecvt_byname < char , char , std:: mbstate_t > conversión de identidad
std :: codecvt_byname < char16_t , char , std:: mbstate_t >
(desde C++11) (obsoleto en C++20)
conversión entre UTF-16 y UTF-8
std :: codecvt_byname < char16_t , char8_t, std:: mbstate_t >
(desde C++20)
conversión entre UTF-16 y UTF-8
std :: codecvt_byname < char32_t , char , std:: mbstate_t >
(desde C++11) (obsoleto en C++20)
conversión entre UTF-32 y UTF-8
std :: codecvt_byname < char32_t , char8_t, std:: mbstate_t >
(desde C++20)
conversión entre UTF-32 y UTF-8
std :: codecvt_byname < wchar_t , char , std:: mbstate_t > conversión específica de localización entre cadena ancha y conjuntos de caracteres estrechos

Funciones miembro

(constructor)
construye un nuevo facet codecvt_byname
(función miembro pública)
(destructor)
destruye un facet codecvt_byname
(función miembro protegida)

std::codecvt_byname:: codecvt_byname

explicit codecvt_byname ( const char * name, std:: size_t refs = 0 ) ;
explicit codecvt_byname ( const std:: string & name, std:: size_t refs = 0 ) ;
(desde C++11)

Construye un nuevo facet std::codecvt_byname para una configuración regional con name .

refs se utiliza para la gestión de recursos: si refs == 0 , la implementación destruye el facet cuando se destruye el último objeto std::locale que lo contiene. De lo contrario, el objeto no se destruye.

Parámetros

name - el nombre de la configuración regional
refs - el número de referencias que enlazan al facet

std::codecvt_byname:: ~codecvt_byname

protected :
~codecvt_byname ( ) ;

Destruye el facet.

Heredado de std:: codecvt

Tipos anidados

Tipo Definición
intern_type internT
extern_type externT
state_type stateT

Miembros de datos

Miembro Descripción
std::locale::id id [static] el identificador del facet

Funciones miembro

invoca do_out
(función miembro pública de std::codecvt<InternT,ExternT,StateT> )
invoca do_in
(función miembro pública de std::codecvt<InternT,ExternT,StateT> )
invoca do_unshift
(función miembro pública de std::codecvt<InternT,ExternT,StateT> )
invoca do_encoding
(función miembro pública de std::codecvt<InternT,ExternT,StateT> )
invoca do_always_noconv
(función miembro pública de std::codecvt<InternT,ExternT,StateT> )
invoca do_length
(función miembro pública de std::codecvt<InternT,ExternT,StateT> )
invoca do_max_length
(función miembro pública de std::codecvt<InternT,ExternT,StateT> )

Funciones miembro protegidas

[virtual]
convierte una cadena de InternT a ExternT , como al escribir en un archivo
(función miembro protegida virtual de std::codecvt<InternT,ExternT,StateT> )
[virtual]
convierte una cadena de ExternT a InternT , como al leer de un archivo
(función miembro protegida virtual de std::codecvt<InternT,ExternT,StateT> )
[virtual]
genera la secuencia de caracteres de terminación de ExternT para conversión incompleta
(función miembro protegida virtual de std::codecvt<InternT,ExternT,StateT> )
[virtual]
retorna el número de caracteres ExternT necesarios para producir un carácter InternT , si es constante
(función miembro protegida virtual de std::codecvt<InternT,ExternT,StateT> )
prueba si el facet codifica una conversión de identidad para todos los valores de argumento válidos
(función miembro protegida virtual de std::codecvt<InternT,ExternT,StateT> )
[virtual]
calcula la longitud de la cadena ExternT que sería consumida por conversión en el buffer InternT dado
(función miembro protegida virtual de std::codecvt<InternT,ExternT,StateT> )
[virtual]
retorna el número máximo de caracteres ExternT que podrían convertirse en un solo carácter InternT
(función miembro protegida virtual de std::codecvt<InternT,ExternT,StateT> )

Heredado de std:: codecvt_base

Tipo anidado Definición
enum result { ok, partial, error, noconv } ; Tipo de enumeración no delimitada
Constante de enumeración Definición
ok la conversión se completó sin errores
partial no todos los caracteres fuente fueron convertidos
error se encontró un carácter inválido
noconv no se requiere conversión, los tipos de entrada y salida son iguales

Ejemplo

Este ejemplo demuestra la lectura de un archivo codificado en GB18030 utilizando el facet codecvt de una localidad compatible con GB18030.

#include <fstream>
#include <iostream>
#include <locale>
#include <string>
int main()
{
    // GB18030 narrow multibyte encoding
    std::ofstream("text.txt") << "\x7a"              // letter 'z', U+007a
                                 "\x81\x30\x89\x38"  // letter 'ß', U+00df
                                 "\xcb\xae"          // CJK ideogram '水' (water), U+6c34
                                 "\x94\x32\xbc\x35"; // musical sign '𝄋' (segno), U+1d10b
    std::wifstream fin("text.txt");
    fin.imbue(std::locale(fin.getloc(),
              new std::codecvt_byname<wchar_t, char, std::mbstate_t>("zh_CN.gb18030")));
    for (wchar_t c; fin.get(c);)
        std::cout << std::hex << std::showbase << static_cast<unsigned>(c) << '\n';
}

Salida posible:

0x7a
0xdf
0x6c34
0x1d10b

Informes de defectos

Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.

DR Aplicado a Comportamiento publicado Comportamiento correcto
LWG 21 C++98 la biblioteca estándar no necesitaba proporcionar
ninguna std::codecvt_byname especialización
se requieren dos especializaciones

Véase también

convierte entre codificaciones de caracteres, incluyendo UTF-8, UTF-16, UTF-32
(plantilla de clase)