Heim  >  Artikel  >  Backend-Entwicklung  >  Wie lese ich Unicode-UTF-8-Dateien in Wstrings in Windows mit C 11?

Wie lese ich Unicode-UTF-8-Dateien in Wstrings in Windows mit C 11?

Susan Sarandon
Susan SarandonOriginal
2024-11-06 05:30:02512Durchsuche

How to Read Unicode UTF-8 Files into Wstrings in Windows with C  11?

Einlesen von Unicode-UTF-8-Dateien in WStrings in Windows

Im Bereich der Windows-Programmierung die Aufgabe, Unicode-Daten (UTF-8) aus einer Datei abzurufen Eine breite Zeichenfolge (wstring) kann durch die vielseitigen Funktionen des C 11-Standards erreicht werden.

Nutzung der std::codecvt_utf8-Facette

Der Kern dieser Lösung liegt in der Nutzung der std ::codecvt_utf8 Facette. Diese Facette dient als Brücke zwischen UTF-8-codierten Bytefolgen und Zeichenketten, die UCS2- oder UCS4-Darstellung verwenden. Es ist der Schlüssel zum Lesen und Schreiben von UTF-8-Dateien, die sowohl Text- als auch Binärformate umfassen.

Einrichten einer lokalisierten Umgebung mit std::locale

Um die Leistungsfähigkeit der Facette zu nutzen, Ein Gebietsschemaobjekt wird normalerweise instanziiert. Dieses Objekt kapselt kulturspezifische Informationen als eine Reihe von Facetten, die gemeinsam eine spezifische lokalisierte Umgebung definieren. Nach Erhalt kann der Stream-Puffer mit diesem Gebietsschema durchdrungen werden.

UTF-8-Dateien mit Codecvt_utf8 lesen

Anhand eines sorgfältig ausgearbeiteten Beispiels demonstrieren wir die praktische Anwendung dieses Ansatzes:

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

Diese Funktion öffnet ordnungsgemäß eine bestimmte UTF-8-Datei, liest ihren Inhalt in einen Wstring und gibt die resultierende Zeichenfolge zurück.

Alternativer Ansatz: Festlegen des globalen C-Gebietsschemas

Anderer Eine praktikable Option besteht darin, das globale C-Gebietsschema festzulegen, bevor mit String-Streams gearbeitet wird. Dieser Befehl stellt sicher, dass alle nachfolgenden Aufrufe des std::locale-Standardkonstruktors Kopien des globalen C-Gebietsschemas liefern, wodurch die Notwendigkeit einer expliziten Stream-Puffer-Imbuing entfällt.

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

Mit dieser Änderung können wstrings dies tun mühelos aus UTF-8-Dateien gelesen werden:

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

Fazit

Die oben genannten Techniken bieten robuste und effiziente Mittel zum Umgang mit Unicode-Dateien (UTF-8) in Windows-Umgebungen und ermöglichen Entwicklern eine effektive manipulieren und verarbeiten Sie breite Zeichenfolgen.

Das obige ist der detaillierte Inhalt vonWie lese ich Unicode-UTF-8-Dateien in Wstrings in 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