внешний файл журнала как UTF8 и с \ r \ n - PullRequest
1 голос
/ 03 июля 2019

У меня есть этот код:

void myMessageHandler(QtMsgType type, const QMessageLogContext &, const QString & msg)
{
    QTime time = QTime::currentTime();
    QString formattedTime = time.toString("hh:mm:ss");
    QByteArray formattedTimeMsg = formattedTime.toLocal8Bit();

    QString txt;
    switch (type) {
    case QtDebugMsg:
        txt = QString("%1: Debug: %2").arg(formattedTime, msg);
        break;
    case QtWarningMsg:
        txt = QString("%1: Warning: %2").arg(formattedTime, msg);
    break;
    case QtCriticalMsg:
        txt = QString("%1: Critical: %2").arg(formattedTime, msg);
    break;
    case QtFatalMsg:
        txt = QString("%1: Fatal: %2").arg(formattedTime, msg);
    break;
    }
    QFile outFile("debug.log");
    outFile.open(QIODevice::WriteOnly | QIODevice::Append);
    QTextStream ts(&outFile);
    ts << txt << endl;
}

, который работает очень хорошо, сохраняя все журналы консоли во внешний файл debug.log. Однако я не знаю, как настроить его для форматирования файла как UTF8, потому что некоторые из моих локальных специальных символов не могут быть правильно прочитаны при открытии файла. А также, как мне сделать новую строку после каждой записи? Все в одной строке зависит от того, в каком приложении я открываю файл журнала - блокнот не показывает новые строки, блокнот ++ делает, wordpad также не ...)

Большое спасибо за вашу помощь, ребята!

1 Ответ

0 голосов
/ 04 июля 2019

И того, и другого можно достичь, настроив текстовый поток:

  1. Терминаторы конца строки будут переведены в "\r\n" в Windows при открытии потока в виде текста: QTextStream ts(&outFile, QIODevice::Text);
  2. Установите кодек для записи UTF-8: ts.setCodec("UTF-8");

Документация QTexStream довольно хорошая: https://doc.qt.io/qt-5/qtextstream.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...