std::codecvt_mode
Von cppreference.com
| Definiert in 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 Features der Unicode-String-Konvertierung spezifiziert.
[edit] Konstanten
| Definiert in Header
<locale> | |
| Wert | Bedeutung |
little_endian
|
nimmt an, dass die Eingabe in Little-Endian-Byte-Reihenfolge vorliegt (gilt nur für UTF-16-Eingabe, der Standard ist Big-Endian) |
consume_header
|
konsumiert das Byte Order Mark (BOM), falls vorhanden am Anfang der Eingabesequenz, und (im Falle von UTF-16) verlässt sich auf die Byte-Reihenfolge, die es für die Dekodierung des Rests der Eingabe spezifiziert |
generate_header
|
gibt das Byte Order Mark am Anfang der Ausgabesequenz aus |
Die anerkannten Byte Order Marks sind
0xfe 0xff
|
UTF-16 Big-Endian |
0xff 0xfe
|
UTF-16 Little-Endian |
0xef 0xbb 0xbf
|
UTF-8 (keine Auswirkung auf die Endianness) |
Wenn std::consume_header beim Lesen einer Datei, die mit einem Byte Order Mark beginnt, nicht ausgewählt ist, wird das Unicode-Zeichen U+FEFF (Zero width non-breaking space) als erstes Zeichen des String-Inhalts gelesen.
[edit] Beispiel
Das folgende Beispiel demonstriert den Verbrauch des UTF-8 BOM
Führen Sie diesen Code aus
#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
[edit] Siehe auch
| konvertiert zwischen Zeichenkodierungen, einschließlich UTF-8, UTF-16, UTF-32 (Klassentemplate) | |
| (C++11)(deprecated in C++17)(removed in C++26) |
konvertiert zwischen UTF-8 und UCS-2/UCS-4 (Klassentemplate) |
| (C++11)(deprecated in C++17)(removed in C++26) |
konvertiert zwischen UTF-16 und UCS-2/UCS-4 (Klassentemplate) |
| (C++11)(deprecated in C++17)(removed in C++26) |
konvertiert zwischen UTF-8 und UTF-16 (Klassentemplate) |