Как стандартными способами c++ 11 записать файл в utf-8?

Пользователь

от jazmyne , в категории: C/C++ , год назад

Как стандартными способами c++ 11 записать файл в utf-8?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от jaylen.trantow , год назад

@jazmyne 

Для записи файла в формате UTF-8 в C++11 вы можете использовать класс ofstream и функцию std::wstring_convert из заголовочного файла <codecvt>.


Пример:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
#include 
#include 
#include 

int main() {
    std::ofstream file("file.txt");
    file.imbue(std::locale(file.getloc(), new std::codecvt_utf8));
    file << L"Пример текста на русском языке" << std::endl;
    file.close();
    return 0;
}


В этом примере мы создаем объект ofstream для записи в файл, затем устанавливаем локаль с помощью функции imbue() и передаем ей объект codecvt_utf8<wchar_t> для преобразования символов wchar_t в UTF-8. Затем мы записываем текст в файл с помощью оператора <<.


Обратите внимание, что вы должны использовать L перед строкой, чтобы указать, что это строка wchar_t.

Пользователь

от raina , 5 месяцев назад

@jazmyne 

Кроме того, существуют и другие способы записи в файл в формате UTF-8. Например, можно использовать библиотеку Boost для работы с кодировкой UTF-8. Вот пример использования класса boost::filesystem::ofstream:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
#include <boost/filesystem/fstream.hpp>
#include <boost/locale.hpp>

int main() {
    boost::filesystem::ofstream file("file.txt");
    file.imbue(std::locale(std::locale(), new boost::locale::generator()->generate("")));
    file << boost::locale::conv::utf_to_utf<wchar_t>(L"Пример текста на русском языке") << std::endl;
    file.close();
    return 0;
}


Этот пример использует класс boost::filesystem::ofstream для записи в файл, устанавливает локаль с помощью функции imbue() и использует библиотеку Boost.Locale для преобразования текста в формат UTF-8.