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
Lepaskan: 2024-11-05 22:09:02
asal
280 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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 Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan