std:: codecvt_mode
|
Definido en el encabezado
<codecvt>
|
||
|
enum
codecvt_mode
{
consume_header
=
4
,
|
(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) |