Почему QByteArray читается из файла меньше, чем недавно загруженный QByteArray?

Я пытаюсь сравнить QByteArray уже сохраненного файла HTML с QByteArray это было только что загружено. Я должен преобразовать QString содержимого файла в QByteArray для того, чтобы сравнить их (или наоборот) и сравнение байтов кажется самым чистым методом, однако при преобразовании из QString в QByteArrayразмер нового QByteArray меньше, чем он должен быть. QByteArray QString::toLocal8Bit() const утверждает, что если он не определен, символы будут подавлены или заменены. Он также сказал, что использует toLatin1() по умолчанию и пытался использовать ASCII, так как это то, что кодируется в веб-сайте. Я все еще получаю те же результаты.

bool NewsBulletin::compareDownload(QByteArray new_contents, QString filename)
{
    bool return_what = false;
    qDebug() << "I am in compareDownload";
//    qDebug() << new_contents[1];
//    qDebug() << new_contents[1] << endl
//             << new_contents[2];
    QFile file(application_path + filename);
    if (file.exists())
    {
//        QString new_contents_qstr(new_contents);
        file.open(QIODevice::ReadOnly | QIODevice::Text);
        QTextStream in(&file);
        QTextCodec::setCodecForLocale(QTextCodec::codecForName("ASCII"));
        QString file_contents = in.readAll();
        QByteArray file_byte_array = file_contents.toLocal8Bit();
        qDebug() << "outputting new file array";
        qDebug() << new_contents[5] << new_contents.size();
        qDebug() << "outputting old file array";
        qDebug() << file_byte_array[5] << file_byte_array.size();
        for (int i=0; i<=file_byte_array.size(); i++)
        {
            if (file_byte_array[i] != new_contents[i])
            {
                return_what = true;
                break;
            }
            else if (i == file_byte_array.size())
            {
                qDebug() << "compareDownload will return false, duplicate file.";
                return_what = false;
            }
        }
    }
    else
    {
        qDebug() << "compareDownload will return true, DNE.";
        return_what = true;
    }
    return return_what;
}

Выход из qDebug() из функции есть:

I am in compareDownload
outputting new file array
T 64704
outputting old file array
T 64576

1 ответ

Решение

Прочитав API в течение нескольких часов, я нашел причину, по которой байты разные.

file.open(QIODevice::ReadOnly | QIODevice::Text);

QIODevice::Text должен быть удален. Этот флаг изменяет терминаторы конца строки на терминатор для cpp, "\n", таким образом, давая разницу в байтах.

Другие вопросы по тегам