Я тоже столкнулся с этой проблемой, я решаю ее с помощью boost locale library
try
{
std::string utf8 = boost::locale::conv::utf_to_utf<char, short>(
(short*)wcontent.c_str(),
(short*)(wcontent.c_str() + wcontent.length()));
content = boost::locale::conv::from_utf(utf8, "ISO-8859-1");
}
catch (boost::locale::conv::conversion_error e)
{
std::cout << "Fail to convert from UTF-8 to " << toEncoding << "!" << std::endl;
break;
}
Функция boost :: locale :: conv :: utf_to_utf пытается преобразовать из буфера, закодированного UTF-16LE, в UTF-8,
Функция boost :: locale :: conv :: from_utf пытается преобразовать из буфера, который закодирован в UTF-8, в ANSI, убедитесь, что кодировка правильная -8859-1). * * +1010
Еще одно напоминание: в Linux std :: wstring имеет длину 4 байта, но в Windows std :: wstring имеет длину 2 байта, поэтому лучше не использовать std :: wstring для хранения буфера UTF-16LE.