std:: codecvt_byname
|
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>
)
|
|
[virtual]
|
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) |