Heim > Backend-Entwicklung > C++ > Hauptteil

Wie lese ich unter Windows effizient eine UTF-8-Datei in einen Wstring ein?

Mary-Kate Olsen
Freigeben: 2024-11-05 22:09:02
Original
129 Leute haben es durchsucht

How to efficiently read a UTF-8 file into a wstring on Windows?

Zugriff auf Unicode-Daten über wstring unter Windows

Beim Umgang mit Unicode-Text unter Windows stellt sich die Frage, wie man einen Unicode-Text (UTF) effizient lesen kann -8) Datei in wstring(s). Glücklicherweise bietet C 11 durch die Facette std::codecvt_utf8 eine vielseitige Lösung.

Die Facette codecvt_utf8 dient als Brücke zwischen UTF-8-Byte-Strings und UCS2- oder UCS4-Zeichenfolgen und ermöglicht Lese- und Schreibvorgänge für beide Texte und binäre UTF-8-Dateien. Um diese Facette zu nutzen, wird empfohlen, ein Gebietsschemaobjekt zu erstellen, das die erforderliche UTF-8-Facette kapselt. Dieses Locale-Objekt kann dann verwendet werden, um Stream-Puffer zu füllen, was eine effiziente UTF-8-Dateiverarbeitung ermöglicht.

Der folgende Codeausschnitt zeigt, wie man mit dieser Technik eine UTF-8-Datei in einen Wstring einliest:

<code class="cpp">#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();
}</code>
Nach dem Login kopieren

Um diese Funktion zu verwenden, übergeben Sie einfach den Dateinamen als Argument und weisen Sie den zurückgegebenen Wstring einer Variablen zu:

<code class="cpp">std::wstring wstr = readFile("a.txt");</code>
Nach dem Login kopieren

Alternativ können Sie das globale C-Gebietsschema auf UTF-8 setzen Verwenden Sie die Facette codecvt_utf8, bevor Sie mit String-Streams arbeiten. Dadurch wird sichergestellt, dass Aufrufe des Standardkonstruktors std::locale das globale C-Gebietsschema mit dem gewünschten Codec zurückgeben:

<code class="cpp">std::locale::global(std::locale(std::locale::empty(), new std::codecvt_utf8<wchar_t>));</code>
Nach dem Login kopieren

Mit dieser globalen Einstellung ist es nicht erforderlich, Stream-Puffer explizit mit dem Gebietsschema zu versehen. Vereinfachung der Verarbeitung von UTF-8-Dateien in Ihrem C-Code.

Das obige ist der detaillierte Inhalt vonWie lese ich unter Windows effizient eine UTF-8-Datei in einen Wstring ein?. 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
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!