Namespaces
Variants

std:: codecvt_utf8_utf16

From cppreference.net
Definido en el encabezado <codecvt>
template <

class Elem,
unsigned long Maxcode = 0x10ffff ,
std:: codecvt_mode Mode = ( std:: codecvt_mode ) 0 >
class codecvt_utf8_utf16

: public std:: codecvt < Elem, char , std:: mbstate_t > ;
(desde C++11)
(obsoleto en C++17)
(eliminado en C++26)

std::codecvt_utf8_utf16 es una faceta std::codecvt que encapsula la conversión entre una cadena de bytes codificada en UTF-8 y una cadena de caracteres codificada en UTF-16. Si Elem es un tipo de 32 bits, una unidad de código UTF-16 se almacenará en cada carácter de 32 bits de la secuencia de salida.

Esta es una faceta de conversión N:M, y no puede ser utilizada con std::basic_filebuf (que solo permite conversiones 1:N, como UTF-32/UTF-8, entre las codificaciones interna y externa). Esta faceta puede ser utilizada con std::wstring_convert .

Contenidos

Parámetros de Plantilla

Elem - either char16_t , char32_t , or wchar_t
Maxcode - el valor más grande de Elem que esta faceta leerá o escribirá sin error
Mode - una constante de tipo std::codecvt_mode

Funciones miembro

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

std::codecvt_utf8_utf16:: codecvt_utf8_utf16

explicit codecvt_utf8_utf16 ( std:: size_t refs = 0 ) ;

Construye un nuevo facet std::codecvt_utf8_utf16 , pasa el contador de referencias inicial refs a la clase base.

Parámetros

refs - el número de referencias que enlazan al facet

std::codecvt_utf8_utf16:: ~codecvt_utf8_utf16

~codecvt_utf8_utf16 ( ) ;

Destruye el facet. A diferencia de los facets gestionados por locale, el destructor de este facet es público.

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

#include <cassert>
#include <codecvt>
#include <cstdint>
#include <iostream>
#include <locale>
#include <string>
int main()
{
    std::string u8 = "z\u00df\u6c34\U0001f34c";
    std::u16string u16 = u"z\u00df\u6c34\U0001f34c";
    // UTF-8 to UTF-16/char16_t
    std::u16string u16_conv = std::wstring_convert<
        std::codecvt_utf8_utf16<char16_t>, char16_t>{}.from_bytes(u8);
    assert(u16 == u16_conv);
    std::cout << "UTF-8 to UTF-16 conversion produced " << u16_conv.size()
              << " code units:\n" << std::showbase << std::hex;
    for (char16_t c : u16_conv)
        std::cout << static_cast<std::uint16_t>(c) << ' ';
    // UTF-16/char16_t to UTF-8
    std::string u8_conv = std::wstring_convert<
        std::codecvt_utf8_utf16<char16_t>, char16_t>{}.to_bytes(u16);
    assert(u8 == u8_conv);
    std::cout << "\nUTF-16 to UTF-8 conversion produced "
              << std::dec << u8_conv.size() << " bytes:\n" << std::hex;
    for (char c : u8_conv)
        std::cout << +static_cast<unsigned char>(c) << ' ';
    std::cout << '\n';
}

Salida:

UTF-8 to UTF-16 conversion produced 5 code units:
0x7a 0xdf 0x6c34 0xd83c 0xdf4c
UTF-16 to UTF-8 conversion produced 10 bytes:
0x7a 0xc3 0x9f 0xe6 0xb0 0xb4 0xf0 0x9f 0x8d 0x8c

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 2229 C++98 el constructor y destructor no estaban especificados los especifica

Véase también

Conversiones de caracteres
multibyte definido por locale
(UTF-8, GB18030)
UTF-8
UTF-16
UTF-16 mbrtoc16 / c16rtomb (con DR488 de C11)

codecvt < char16_t , char ,mbstate_t >
codecvt_utf8_utf16 < char16_t >
codecvt_utf8_utf16 < char32_t >
codecvt_utf8_utf16 < wchar_t >

N/A
UCS-2 c16rtomb (sin DR488 de C11) codecvt_utf8 < char16_t > codecvt_utf16 < char16_t >
UTF-32

mbrtoc32 / c32rtomb

codecvt < char32_t , char ,mbstate_t >
codecvt_utf8 < char32_t >

codecvt_utf16 < char32_t >

system wchar_t :

UTF-32 (no Windows)
UCS-2 (Windows)

mbsrtowcs / wcsrtombs
use_facet < codecvt
< wchar_t , char ,mbstate_t >> ( locale )

codecvt_utf8 < wchar_t > codecvt_utf16 < wchar_t >
convierte entre codificaciones de caracteres, incluyendo UTF-8, UTF-16, UTF-32
(plantilla de clase)
(C++11) (obsoleto en C++17) (eliminado en C++26)
etiquetas para alterar el comportamiento de las facetas codecvt estándar
(enumeración)
(C++11) (obsoleto en C++17) (eliminado en C++26)
convierte entre UTF-8 y UCS-2/UCS-4
(plantilla de clase)
(C++11) (obsoleto en C++17) (eliminado en C++26)
convierte entre UTF-16 y UCS-2/UCS-4
(plantilla de clase)