Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk membaca fail UTF-8 dengan cekap ke dalam wstring pada Windows?
Mengakses Data Unikod melalui wstring pada Windows
Apabila mengendalikan teks Unicode pada Windows, persoalan timbul tentang cara membaca Unicode (UTF) dengan cekap -8) fail ke dalam wstring(s). Nasib baik, C 11 menyediakan penyelesaian serba boleh melalui faset std::codecvt_utf8.
Faset codecvt_utf8 berfungsi sebagai jambatan antara rentetan bait UTF-8 dan rentetan aksara UCS2 atau UCS4, membolehkan operasi baca dan tulis untuk kedua-dua teks dan fail UTF-8 binari. Untuk memanfaatkan aspek ini, adalah disyorkan untuk mencipta objek setempat yang merangkumi aspek UTF-8 yang diperlukan. Objek setempat ini kemudiannya boleh digunakan untuk menjiwai penimbal strim, membolehkan pengendalian fail UTF-8 yang cekap.
Coretan kod berikut menunjukkan cara membaca fail UTF-8 ke dalam rentetan menggunakan teknik ini:
<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>
Untuk menggunakan fungsi ini, hanya hantar nama fail sebagai argumen dan tetapkan wstring yang dikembalikan kepada pembolehubah:
<code class="cpp">std::wstring wstr = readFile("a.txt");</code>
Sebagai alternatif, anda boleh menetapkan tempat C global kepada UTF-8 menggunakan faset codecvt_utf8 sebelum bekerja dengan aliran rentetan. Ini memastikan bahawa panggilan ke pembina lalai std::locale akan mengembalikan tempat C global yang diserapkan dengan codec yang diingini:
<code class="cpp">std::locale::global(std::locale(std::locale::empty(), new std::codecvt_utf8<wchar_t>));</code>
Dengan tetapan global ini, tidak perlu meniru penimbal strim secara eksplisit dengan tempat itu, memudahkan proses pengendalian fail UTF-8 dalam kod C anda.
Atas ialah kandungan terperinci Bagaimana untuk membaca fail UTF-8 dengan cekap ke dalam wstring pada Windows?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!