QT C++ Чтение файла

Добрейшего времени суток.

Нужно передавать файлы посредствам TCP протокола. И у меня всё работает , за исключением ЧТЕНИЯ ДАННЫХ из оригинального файла. Дело в том, что

QFile file(pathToFile);
file.read(512);

такой код считывает корректно только символы с кодами ASCII от 0 до 128(из-за UTF-8). Как собственно считывать так , чтобы каждый символ нормально считывался. P.S. Видел как считывали с помощью

QString::fromAscii(file.read(512)).toBase64();

но похоже это устаревшая функция из старых версий QT.

Спасибо.


Ответы (1 шт):

Автор решения: Sergey Tatarincev

Из файла считывается поток байт, и 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();
→ Ссылка