@KorwinD

Как правильно построчно считать файл в кодировке utf-8 с помощью getline на c++?

Имеется следующий код:
#include <iostream>
#include <string>
#include <fstream>

using namespace std;

void main()
{
	setlocale(LC_ALL, "utf-8");
	wifstream file("Text.txt");
	wofstream file1("Text1.txt");
	wstring str;
	while (getline(file,str))
	{
		wcout << str << endl;
		file1 << str << endl;
	}
	system("pause");
}


В файле Text.txt лежат следующие строки:
dddd
qqqq
яяяя
中華人民共和國


Вывод в консоль такой:
я╗┐dddd
qqqq
╤П╤П╤П╤П
ф╕ншПпф║║ц░СхЕ▒хТМхЬЛ


Но при этом, вывод в файл Text1.txt абсолютно правильный, в отличии от консольного вывода. Во-первых, хотелось бы узнать как сделать правильный вывод в консоль, во-вторых, откуда в первой строке берется "я╗┐".?
  • Вопрос задан
  • 5524 просмотра
Пригласить эксперта
Ответы на вопрос 2
profesor08
@profesor08
Текст который ты выводишь отличается от кодировки в консоли. Поэтому у тебя такой вывод.
Ответ написан
Попробуйте такой код чтения из файла
#include <sstream>
#include <fstream>
#include <codecvt>

std::wstring readFile(const char* filename)
{
    std::wifstream wif(filename);
    wif.imbue(std::locale(std::locale::empty(), new std::codecvt_utf8<wchar_t>));
    std::wstringstream wss;
    wss << wif.rdbuf();
    return wss.str();
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы