Heim > Backend-Entwicklung > C++ > Wie kann ich Unicode-UTF-8-Dateien in Wstrings in C 11 einlesen?

Wie kann ich Unicode-UTF-8-Dateien in Wstrings in C 11 einlesen?

Mary-Kate Olsen
Freigeben: 2024-11-06 01:02:03
Original
319 Leute haben es durchsucht

How can I read Unicode UTF-8 files into wstrings in C  11?

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;
}
Nach dem Login kopieren

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>));
Nach dem Login kopieren

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();
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage