Maison  >  Article  >  développement back-end  >  Comment lire des fichiers Unicode UTF-8 dans Wstrings sous Windows avec C 11 ?

Comment lire des fichiers Unicode UTF-8 dans Wstrings sous Windows avec C 11 ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-06 05:30:02514parcourir

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

Lecture de fichiers Unicode UTF-8 dans des WStrings sous Windows

Dans le domaine de la programmation Windows, la tâche de récupération des données Unicode (UTF-8) d'un fichier vers une chaîne de caractères large (wstring) peut être réalisée grâce aux capacités polyvalentes fournies par la norme C 11.

Exploiter la facette std::codecvt_utf8

Le nœud de cette solution réside dans l'utilisation de la facette std ::facette codecvt_utf8. Cette facette sert de pont entre les chaînes d'octets codées en UTF-8 et les chaînes de caractères utilisant la représentation UCS2 ou UCS4. Il détient la clé de la lecture et de l'écriture de fichiers UTF-8, englobant à la fois les formats texte et binaire.

Établissement d'un environnement localisé avec std::locale

Pour exploiter la puissance de la facette, un objet locale est généralement instancié. Cet objet encapsule des informations spécifiques à la culture sous la forme d'un ensemble de facettes qui définissent conjointement un environnement localisé spécifique. Une fois obtenu, le tampon de flux peut être imprégné de ces paramètres régionaux.

Lecture de fichiers UTF-8 avec Codecvt_utf8

Avec un exemple méticuleusement conçu, nous démontrons l'application pratique de cette approche :

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

Cette fonction ouvre gracieusement un fichier UTF-8 désigné, lit son contenu dans une chaîne wstring et renvoie la chaîne résultante.

Approche alternative : définition des paramètres régionaux C mondiaux

Une autre Une option viable implique de définir les paramètres régionaux C globaux avant de s'engager dans les flux de chaînes. Cette commande garantit que toutes les invocations ultérieures du constructeur par défaut std::locale produiront des copies de la locale C globale, évitant ainsi le besoin d'imprégnation explicite du tampon de flux.

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

Avec cette modification en place, les wstrings peuvent être lu sans effort à partir des fichiers UTF-8 :

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

Conclusion

Les techniques susmentionnées fournissent des moyens robustes et efficaces de gérer les fichiers Unicode (UTF-8) dans les environnements Windows, permettant aux développeurs de gérer efficacement manipuler et traiter de larges chaînes de caractères.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn