LINUX.ORG.RU

Неверная кодировка при записи в файл (С++)

 , , ,


0

5

Пытаюсь записать в файл содержимое полей класса, которые затем надо вывести на экран:

ifstream& operator>> (ifstream& stream, course& acourse){
	getline (stream, acourse.currency);
	getline (stream, acourse.state);
	getline (stream, acourse.code);
	getline (stream, acourse.subunit);
	stream >> acourse.fraction;
	stream >> acourse.rate;
	stream.get();
	return stream;
}

ofstream& operator<< (ofstream& stream, course& acourse){
	stream << acourse.currency << endl;
	stream << acourse.state << endl;
	stream << acourse.code << endl;
	stream << acourse.subunit << endl;
	stream << acourse.fraction << endl;
	stream << acourse.rate << endl;
	return stream;
}

ifstream& operator>> (ifstream& stream, crypto& acrypto)
{
	stream>>static_cast<course&>(acrypto);
	getline (stream, acrypto.algo);
	return stream;
}

ofstream& operator<< (ofstream& stream, crypto& acrypto)
{
	stream<<static_cast<course&>(acrypto);
	stream<<acrypto.algo<<endl;
	return stream;
}
Если в файл записать кириллические строки, то он открывается почему - то в кодировке ISO, а при записи ломаются первые юникодные символы в первой строке класса, т. е. Е превращается в \95, Б - в \91. Предыдущие версии моей программы такого не делали. Грешу либо на обновление gcc, либо на перегрузку операторов. Помогите мне понять, что здесь делать.

Грешу либо на обновление gcc

Вангую, что вместе с gcc обновилось что-то ещё.

Удваиваю предыдущего анонимуса насчёт locale.

anonymous
()

Вот что мне выдаёт locale:

 LANG=ru_RU.UTF-8
LANGUAGE=ru_RU
LC_CTYPE="ru_RU.UTF-8"
LC_NUMERIC="ru_RU.UTF-8"
LC_TIME="ru_RU.UTF-8"
LC_COLLATE="ru_RU.UTF-8"
LC_MONETARY="ru_RU.UTF-8"
LC_MESSAGES="ru_RU.UTF-8"
LC_PAPER="ru_RU.UTF-8"
LC_NAME="ru_RU.UTF-8"
LC_ADDRESS="ru_RU.UTF-8"
LC_TELEPHONE="ru_RU.UTF-8"
LC_MEASUREMENT="ru_RU.UTF-8"
LC_IDENTIFICATION="ru_RU.UTF-8"
LC_ALL= 

Что ещё мне надо сделать, я не пойму.

byulent
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.