Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk membaca fail UTF-8 dengan cekap ke dalam wstring pada Windows?

Bagaimana untuk membaca fail UTF-8 dengan cekap ke dalam wstring pada Windows?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-05 22:09:02210semak imbas

How to efficiently read a UTF-8 file into a wstring on 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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn