В области программирования Windows задача извлечения данных Unicode (UTF-8) из файла в широкую строку символов (wstring) можно создать с помощью универсальных возможностей, предоставляемых стандартом C 11.
Суть этого решения заключается в использовании фасета std::codecvt_utf8. Этот аспект служит мостом между строками байтов в кодировке UTF-8 и строками символов, использующими представление UCS2 или UCS4. Он содержит ключ к чтению и записи файлов UTF-8, охватывающих как текстовые, так и двоичные форматы.
Чтобы использовать возможности фасета, обычно создается экземпляр объекта локали. Этот объект инкапсулирует информацию, специфичную для конкретной культуры, в виде набора фасетов, которые совместно определяют конкретную локализованную среду. После получения буфер потока может быть наполнен этой локалью.
На тщательно разработанном примере мы демонстрируем практическое применение этого подхода:
#include
#include
#include
std::wstring readFile(const char* filename)
{
std::wifstream wif(filename);
wif.imbue(std::locale(std::locale::empty(), new std::codecvt_utf8));
std::wstringstream wss;
wss Эта функция корректно открывает указанный файл UTF-8, считывает его содержимое в wstring и возвращает результирующую строку.
Альтернативный подход: установка глобальной локали C
Другой жизнеспособный вариант предполагает установку глобальной локали C перед взаимодействием со строковыми потоками. Эта команда гарантирует, что все последующие вызовы конструктора по умолчанию std::locale будут давать копии глобальной локали C, что устраняет необходимость явной реализации буфера потока.
std::locale::global(std::locale(std::locale::empty(), new std::codecvt_utf8));
Благодаря этой модификации wstrings можно легко читать из файлов UTF-8:
std::wstring wstr = readFile("a.txt");
Вывод
Вышеупомянутые методы обеспечивают надежные и эффективные средства обработки файлов Unicode (UTF-8) в средах Windows, позволяющие разработчикам эффективно манипулировать и обрабатывать широкие строки символов.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3