Heim > Artikel > Backend-Entwicklung > Wie lese ich unter Windows effizient eine UTF-8-Datei in einen Wstring ein?
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!