Heim  >  Artikel  >  Backend-Entwicklung  >  Wie lese ich Unicode-Dateien (UTF-8) in wstrings unter Windows mit C 11?

Wie lese ich Unicode-Dateien (UTF-8) in wstrings unter Windows mit C 11?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-06 07:26:02916Durchsuche

How to Read Unicode (UTF-8) Files into wstrings on Windows with C  11?

Einlesen von Unicode-UTF-8-Dateien in Wstrings unter Windows

Das Einlesen von Unicode-Dateien (UTF-8) in Wstrings unter Windows ist möglich kann mithilfe der std::codecvt_utf8-Facette von C 11 effizient erreicht werden.

Mit std::codecvt_utf8 wird die Konvertierung zwischen UTF-8-Bytezeichenfolgen und UCS2- oder UCS4-Zeichenfolgen vereinfacht. Diese Facette ermöglicht das Lesen und Schreiben von UTF-8-Dateien, sowohl Text- als auch Binärdateien.

Um die Facette zu nutzen, erstellen Sie ein Gebietsschemaobjekt, das Facetten kapselt, die die gewünschte lokalisierte Umgebung definieren. Sobald das Locale-Objekt erstellt wurde, füllen Sie Ihren Stream-Puffer damit auf.

Hier ist eine Implementierung mit Imbuing:

#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();
}

Nach dem Auffüllen des Stream-Puffers ist das Einlesen der Datei in einen Wstring unkompliziert:

std::wstring wstr = readFile("a.txt");

Alternativ wird durch das Festlegen des globalen C-Gebietsschemas vor der Arbeit mit String-Streams die Notwendigkeit einer expliziten Durchdringung überflüssig gemacht:

std::locale::global(std::locale(std::locale::empty(), new std::codecvt_utf8<wchar_t>));

Dadurch wird das globale Gebietsschema als Standard festgelegt, was automatisch erfolgt Auf zukünftige Stream-Puffer anwenden.

Das obige ist der detaillierte Inhalt vonWie lese ich Unicode-Dateien (UTF-8) in wstrings unter Windows mit C 11?. 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