Какой самый "стандартный" способ читать-писать файлы в кодировке UTF-8, без того чтобы самому определять codecvt?
Поскольку Boost в некотором смысле стандартен, так как является полигоном для обкатки того, что возможно будет включено в стандарт, поискал там и нашел
utf8_codecvt_facet:
#include <fstream>
#include <locale>
using namespace std;
#include <boost/archive/detail/utf8_codecvt_facet.hpp>
using boost::archive::detail::utf8_codecvt_facet;
int main()
{
wofstream out("out.txt");
out.imbue(locale(std::locale(), new utf8_codecvt_facet()));
out << L"ёпрст\n";
}
Однако:
В документации не указано, какой заголовок включать
Нашел boost/archive/detail/utf8_codecvt_facet.hpp, но слово detail никак не радует
Вроде бы под Linux'ом есть locale "en_US.UTF-8" (кстати, нельзя ли просто ".UTF-8"?), под Windows аналогичного "English_United States.UTF-8" вроде бы нет; может называется по другому?
Ну и нет ли другого, не связанного с locales решения?