std:: codecvt_mode
|
Definiert im Header
<codecvt>
|
||
|
enum
codecvt_mode
{
consume_header
=
4
,
|
(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) |