Einlesen von Unicode-UTF-8-Dateien in WStrings
In Windows-Umgebungen bietet die Verwendung von C 11 die Möglichkeit, Unicode (UTF-8) zu lesen. Dateien in wstrings. Dies wird durch die Verwendung der Facette std::codecvt_utf8 ermöglicht.
Facette std::codecvt_utf8
Die Facette std::codecvt_utf8 erleichtert die Konvertierung zwischen UTF- 8 kodierte Bytefolgen und UCS2- oder UCS4-Zeichenfolgen. Diese Vielseitigkeit ermöglicht das Lesen und Schreiben von sowohl Text- als auch binären UTF-8-Dateien.
Verwendung
Eine Implementierung unter Verwendung der Facette umfasst die Erstellung eines Gebietsschemaobjekts, das die Facette kapselt und gebietsspezifische Informationen. Indem ein Stream-Puffer mit diesem Gebietsschema versehen wird, wird das Lesen von UTF-8-Dateien möglich.
Eine Beispielimplementierung mit diesem Ansatz ist:
#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(); } int main() { std::wstring wstr = readFile("a.txt"); // Do something with your wstring return 0; }
Globale Gebietsschemaeinstellung
Alternativ ist es möglich, das globale C-Gebietsschema mit der Facette std::codecvt_utf8 festzulegen. Diese Methode stellt sicher, dass alle std::locale-Standardkonstruktoren eine Kopie des globalen Gebietsschemas zurückgeben, wodurch die Notwendigkeit einer expliziten Stream-Puffer-Einbindung entfällt.
So legen Sie das globale Gebietsschema fest:
std::locale::global(std::locale(std::locale::empty(), new std::codecvt_utf8<wchar_t>));
Mit dieser Einstellung können Sie den Dateilesevorgang vereinfachen auf:
std::wifstream wif("a.txt"); std::wstringstream wss; wss << wif.rdbuf(); std::wstring wstr = wss.str();
Das obige ist der detaillierte Inhalt vonWie kann ich Unicode-UTF-8-Dateien in Wstrings in C 11 einlesen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!