Файл тестовый, могу свободно менять текст и кодировки (чем уже занимался), если вы об этом
Я так понял, что в общем случае рекомендуют текст в UTF16 сначала прочитать во временный буфер, а потом сконвертировать его в UTF8
Функцию конвертации скопипастил из https://stackoverflow.com/questions/50696864/reading-utf-16-file-in-c
#include <iostream>
#include <fstream>
#include <locale>
#include <codecvt>
int main(int argc, char *argv[])
{
std::ifstream fin("text.txt", std::ios::binary);
fin.seekg(0, std::ios::end);
size_t size = (size_t)fin.tellg();
//skip BOM
fin.seekg(2, std::ios::beg);
size -= 2;
std::u16string u16((size / 2) + 1, '\0');
fin.read((char*)&u16[0], size);
std::string utf8 = std::wstring_convert<std::codecvt_utf8_utf16<char16_t>, char16_t>{}.to_bytes(u16);
std::cout << utf8 << std::endl;
return 0;
}
Вроде как читает