Namespaces
Variants

std:: codecvt_mode

From cppreference.net
Definiert im Header <codecvt>
enum codecvt_mode {

consume_header = 4 ,
generate_header = 2 ,
little_endian = 1

} ;
(seit C++11)
(veraltet in C++17)
(entfernt in C++26)

Die Facetten std::codecvt_utf8 , std::codecvt_utf16 und std::codecvt_utf8_utf16 akzeptieren einen optionalen Wert vom Typ std::codecvt_mode als Template-Argument, der optionale Funktionen der Unicode-String-Konvertierung spezifiziert.

Konstanten

Definiert im Header <locale>
Enumerator Bedeutung
little_endian nimmt Little-Endian-Byte-Reihenfolge für die Eingabe an (gilt nur für UTF-16-Eingabe, Standard ist Big-Endian)
consume_header verarbeitet die Byte Order Mark, falls am Anfang der Eingabesequenz vorhanden, und (im Fall von UTF-16) verlässt sich auf die darin spezifizierte Byte-Reihenfolge zur Dekodierung des restlichen Eingabestroms
generate_header gibt die Byte Order Mark am Anfang der Ausgabesequenz aus

Die erkannten Byte-Reihenfolge-Markierungen sind:

0xfe 0xff UTF-16 Big-Endian
0xff 0xfe UTF-16 Little-Endian
0xef 0xbb 0xbf UTF-8 (keine Auswirkung auf die Bytereihenfolge)

Wenn std::consume_header beim Lesen einer Datei, die mit einer Byte-Reihenfolge-Markierung beginnt, nicht ausgewählt wird, wird das Unicode-Zeichen U+FEFF (Nullbreite nicht umbrechender Leerraum) als erstes Zeichen des Zeichenketteninhalts gelesen.

Beispiel

Das folgende Beispiel demonstriert das Konsumieren der UTF-8 BOM:

#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';
}

Ausgabe:

0x7a
0x6c34
0x1d10b

Siehe auch

konvertiert zwischen Zeichenkodierungen, einschließlich UTF-8, UTF-16, UTF-32
(Klassentemplate)
(C++11) (veraltet in C++17) (entfernt in C++26)
konvertiert zwischen UTF-8 und UCS-2/UCS-4
(Klassentemplate)
(C++11) (veraltet in C++17) (entfernt in C++26)
konvertiert zwischen UTF-16 und UCS-2/UCS-4
(Klassentemplate)
(C++11) (veraltet in C++17) (entfernt in C++26)
konvertiert zwischen UTF-8 und UTF-16
(Klassentemplate)