Maison  >  Article  >  développement back-end  >  Comment lire efficacement un fichier UTF-8 dans une chaîne sous Windows ?

Comment lire efficacement un fichier UTF-8 dans une chaîne sous Windows ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-05 22:09:02205parcourir

How to efficiently read a UTF-8 file into a wstring on Windows?

Accès aux données Unicode via wstring sous Windows

Lors de la manipulation de texte Unicode sous Windows, la question se pose de savoir comment lire efficacement un Unicode (UTF -8) fichier dans wstring(s). Heureusement, C 11 fournit une solution polyvalente grâce à la facette std::codecvt_utf8.

La facette codecvt_utf8 sert de pont entre les chaînes d'octets UTF-8 et les chaînes de caractères UCS2 ou UCS4, permettant des opérations de lecture et d'écriture pour le texte. et fichiers binaires UTF-8. Pour exploiter cette facette, il est recommandé de créer un objet de paramètres régionaux qui encapsule la facette UTF-8 nécessaire. Cet objet de paramètres régionaux peut ensuite être utilisé pour imprégner des tampons de flux, permettant une gestion efficace des fichiers UTF-8.

L'extrait de code suivant montre comment lire un fichier UTF-8 dans une chaîne wstring à l'aide de cette technique :

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

Pour utiliser cette fonction, transmettez simplement le nom du fichier comme argument et affectez la chaîne wstring renvoyée à une variable :

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

Vous pouvez également définir les paramètres régionaux C globaux sur UTF-8. en utilisant la facette codecvt_utf8 avant de travailler avec des flux de chaînes. Cela garantit que les appels au constructeur par défaut std::locale renverront la locale C globale imprégnée du codec souhaité :

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

Avec ce paramètre global, il n'est pas nécessaire d'imprégner explicitement les tampons de flux avec la locale, simplifiant le processus de gestion des fichiers UTF-8 dans votre code C.

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