Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah saya boleh membaca fail Unicode UTF-8 ke dalam wstrings dalam C 11?

Bagaimanakah saya boleh membaca fail Unicode UTF-8 ke dalam wstrings dalam C 11?

Mary-Kate Olsen
Lepaskan: 2024-11-06 01:02:03
asal
375 orang telah melayarinya

How can I read Unicode UTF-8 files into wstrings in 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;
}
Salin selepas log masuk

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

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

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!

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