Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah saya boleh membaca fail Unicode UTF-8 ke dalam wstrings dalam C 11?
Membaca fail Unicode UTF-8 ke dalam WStrings
Dalam persekitaran Windows, menggunakan C 11 menyediakan keupayaan untuk membaca Unicode (UTF-8) fail ke dalam wstrings. Ini dimungkinkan melalui penggunaan faset std::codecvt_utf8.
std::codecvt_utf8 Facet
Faset std::codecvt_utf8 memudahkan penukaran antara UTF- 8 rentetan bait yang dikodkan dan rentetan aksara UCS2 atau UCS4. Fleksibiliti ini membolehkan pembacaan dan penulisan kedua-dua teks dan fail UTF-8 binari.
Penggunaan
Pelaksanaan menggunakan faset melibatkan penciptaan objek setempat yang merangkum facet dan maklumat khusus setempat. Dengan menerapkan penimbal strim dengan tempat ini, bacaan fail UTF-8 menjadi mungkin.
Contoh pelaksanaan menggunakan pendekatan ini ialah:
#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(); } int main() { std::wstring wstr = readFile("a.txt"); // Do something with your wstring return 0; }
Tetapan Tempat Global
Sebagai alternatif, anda boleh menetapkan tempat C global dengan faset std::codecvt_utf8. Kaedah ini memastikan bahawa semua pembina lalai std::locale akan memulangkan salinan tempat global, menghapuskan keperluan untuk penyerapan penimbal strim eksplisit.
Untuk menetapkan tempat global:
std::locale::global(std::locale(std::locale::empty(), new std::codecvt_utf8<wchar_t>));
Dengan tetapan ini, anda boleh memudahkan operasi membaca fail kepada:
std::wifstream wif("a.txt"); std::wstringstream wss; wss << wif.rdbuf(); std::wstring wstr = wss.str();
Atas ialah kandungan terperinci Bagaimanakah saya boleh membaca fail Unicode UTF-8 ke dalam wstrings dalam C 11?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!