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
Mary-Kate Olsenasal
2024-11-06 01:02:03319semak imbas

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;
}

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!

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