Einlesen von Unicode-UTF-8-Dateien in Wstrings unter Windows
Das Einlesen von Unicode-Dateien (UTF-8) in Wstrings unter Windows ist möglich kann mithilfe der std::codecvt_utf8-Facette von C 11 effizient erreicht werden.
Mit std::codecvt_utf8 wird die Konvertierung zwischen UTF-8-Bytezeichenfolgen und UCS2- oder UCS4-Zeichenfolgen vereinfacht. Diese Facette ermöglicht das Lesen und Schreiben von UTF-8-Dateien, sowohl Text- als auch Binärdateien.
Um die Facette zu nutzen, erstellen Sie ein Gebietsschemaobjekt, das Facetten kapselt, die die gewünschte lokalisierte Umgebung definieren. Sobald das Locale-Objekt erstellt wurde, füllen Sie Ihren Stream-Puffer damit auf.
Hier ist eine Implementierung mit Imbuing:
#include <sstream> #include <fstream> #include <codecvt> std::wstring readFile(const char* filename) { std::wifstream wif(filename); wif.imbue(std::locale(std::locale::empty(), new std::codecvt_utf8<wchar_t>)); std::wstringstream wss; wss << wif.rdbuf(); return wss.str(); }
Nach dem Auffüllen des Stream-Puffers ist das Einlesen der Datei in einen Wstring unkompliziert:
std::wstring wstr = readFile("a.txt");
Alternativ wird durch das Festlegen des globalen C-Gebietsschemas vor der Arbeit mit String-Streams die Notwendigkeit einer expliziten Durchdringung überflüssig gemacht:
std::locale::global(std::locale(std::locale::empty(), new std::codecvt_utf8<wchar_t>));
Dadurch wird das globale Gebietsschema als Standard festgelegt, was automatisch erfolgt Auf zukünftige Stream-Puffer anwenden.
Das obige ist der detaillierte Inhalt vonWie lese ich Unicode-Dateien (UTF-8) in wstrings unter Windows mit C 11?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!