Heim  >  Artikel  >  Backend-Entwicklung  >  Wie lese ich unter Windows effizient eine UTF-8-Datei in einen Wstring ein?

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

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-05 22:09:02110Durchsuche

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>

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>

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>

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!

Stellungnahme:
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