QT C++ Чтение файла
Добрейшего времени суток.
Нужно передавать файлы посредствам TCP протокола. И у меня всё работает , за исключением ЧТЕНИЯ ДАННЫХ из оригинального файла. Дело в том, что
QFile file(pathToFile);
file.read(512);
такой код считывает корректно только символы с кодами ASCII от 0 до 128(из-за UTF-8). Как собственно считывать так , чтобы каждый символ нормально считывался. P.S. Видел как считывали с помощью
QString::fromAscii(file.read(512)).toBase64();
но похоже это устаревшая функция из старых версий QT.
Спасибо.
Ответы (1 шт):
Из файла считывается поток байт, и QFile совершенно без разницы на кодировку.
QByteArray QIODevice::read(qint64 maxSize)
От вас требуется только правильно преобразовать байты в текст:
QByteArray data = file.readAll();
QString text;
// Если текст в локальной 8-бит кодировке (windows-1251);
text = QString::fromLocal8Bit(data);
// Если текст в UTF-8
text = QString::fromUtf8(data);
и т.д. более подробно читайте документацию https://doc.qt.io/qt-5/qstring.html
Если задача не вполне стандартная, можно воспользоваться QTextCodec для считывания других кодировок:
QTextCodec* codec = QTextCodec::codecForName("CP866"); // кодек для DOS кодировки
QTextStream s(&f);
s.setCodec(codec);
QString text = s.readAll();