Не получается прочитать текст, включающий в себя кириллицу и вывести на консоль из файла, который имеет кодировку UTF8. Имеется следующий код:
#include
int main(int argc, wchar_t* argv[])
{
std::wcout.imbue(std::locale("rus_rus.866"));
std::wcin.imbue(std::locale("rus_rus.866"));
std::wfstream fout;
fout.open(L"cd.txt", std::ios::in);
if (fout.is_open())
{
fout.imbue(std::locale("rus_rus.1251"));
wchar_t ch;
std::wstring inputT;
while (fout.get(ch))
inputT += ch;
std::wcout << inputT;
std::wcout << std::endl;
fout.close();
}
std::cin.get();
return 0;
}
Причем если читаемый файл имеет кодировку ANSI, весь текст включая русские буквы отображается корректно, но если файл в кодировке UTF8, то отображается что то вообще не то. Как это можно исправить?
Ответ
Проблема делится на две части: как вывести текст и как прочитать его.
Для вывода имеет смысл воспользоваться рекомендацией отсюда (_setmode(_fileno(...), _O_U16TEXT); и использование std::wstring).
Это означает, что нам нужно прочитать из файла строки из utf-8 в формат wstring. Это делается так
fout.imbue(std::locale(std::locale::empty(), new std::codecvt_utf8
(и должно работать вне зависимости от ширины wchar_t). Вы используете std::locale("rus_rus.1251"), это не должно работать.
Комментариев нет:
Отправить комментарий