Namespaces
Variants

std:: codecvt_mode

From cppreference.net
Definido en el encabezado <codecvt>
enum codecvt_mode {

consume_header = 4 ,
generate_header = 2 ,
little_endian = 1

} ;
(desde C++11)
(obsoleto en C++17)
(eliminado en C++26)

Las facetas std::codecvt_utf8 , std::codecvt_utf16 , y std::codecvt_utf8_utf16 aceptan un valor opcional de tipo std::codecvt_mode como argumento de plantilla, que especifica características opcionales de la conversión de cadenas unicode.

Constantes

Definido en el encabezado <locale>
Enumerador Significado
little_endian asume que la entrada está en orden de bytes little-endian (se aplica solo a entrada UTF-16, el valor predeterminado es big-endian)
consume_header consume la marca de orden de bytes, si está presente al inicio de la secuencia de entrada, y (en el caso de UTF-16) confía en el orden de bytes que especifica para decodificar el resto de la entrada
generate_header genera la marca de orden de bytes al inicio de la secuencia de salida

Las marcas de orden de bytes reconocidas son:

0xfe 0xff UTF-16 big-endian
0xff 0xfe UTF-16 little-endian
0xef 0xbb 0xbf UTF-8 (sin efecto en el orden de bytes)

Si std::consume_header no está seleccionado al leer un archivo que comienza con una marca de orden de bytes, el carácter Unicode U+FEFF (espacio de no separación de ancho cero) se leerá como el primer carácter del contenido de la cadena.

Ejemplo

El siguiente ejemplo demuestra cómo consumir la BOM UTF-8:

#include <codecvt>
#include <cwchar>
#include <fstream>
#include <iostream>
#include <locale>
#include <string>
int main()
{
    // UTF-8 data with BOM
    std::ofstream{"text.txt"} << "\ufeffz\u6c34\U0001d10b";
    // read the UTF-8 file, skipping the BOM
    std::wifstream fin{"text.txt"};
    fin.imbue(std::locale(fin.getloc(),
                          new std::codecvt_utf8<wchar_t, 0x10ffff, std::consume_header>));
    for (wchar_t c; fin.get(c);)
        std::cout << std::hex << std::showbase << (std::wint_t)c << '\n';
}

Salida:

0x7a
0x6c34
0x1d10b

Véase también

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)
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)
(C++11) (obsoleto en C++17) (eliminado en C++26)
convierte entre UTF-8 y UTF-16
(plantilla de clase)