Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Qt-messagehandler编码_C++_Qt - Fatal编程技术网

C++ Qt-messagehandler编码

C++ Qt-messagehandler编码,c++,qt,C++,Qt,当我通过qInstallMessageHandler函数实现自定义日志处理程序时,调试日志中的俄语文本有问题。目前,我的代码是: void myMessageOutput(QtMsgType type, const QMessageLogContext &context, const QString &msg) { QByteArray localMsg = msg.toLatin1(); QString stringType; switch (typ

当我通过
qInstallMessageHandler
函数实现自定义日志处理程序时,调试日志中的俄语文本有问题。目前,我的代码是:

void myMessageOutput(QtMsgType type, const QMessageLogContext &context, const QString &msg) {

    QByteArray localMsg = msg.toLatin1();

    QString stringType;
    switch (type) {
    case QtDebugMsg:
        stringType = "D";
        break;
    case QtWarningMsg:
        stringType = "W";
        break;
    case QtCriticalMsg:
        stringType = "C";
        break;
    case QtFatalMsg:
        stringType = "Fatal";
        break;
    default:
        stringType = "Unknown";
    }

    QString logString = QString("[%1] %2:%3 - %4\n")
            .arg(stringType)
            .arg(context.function)
            .arg(context.line)
            .arg(localMsg.constData());

    if (__logFile.isOpen()) {
        QTextStream stream(&__logFile);
        stream << logString;
    }

    QTextStream stderrStream(stderr, QIODevice::WriteOnly);

    stderrStream<<logString;

    if (type == QtFatalMsg) {
        abort();
    }
} 
但我得到的不是“你好”

[D] 内部主(内部,字符**):131-嗨

在qt创建者日志中。我尝试使用Windows-1251编解码器,但它没有改变任何东西

问题在于:

QByteArray localMsg = msg.toLatin1();
引述:

以QByteArray形式返回字符串的拉丁文-1表示形式

如果字符串包含非拉丁字母1,则返回的字节数组未定义 人物。这些字符可能会被抑制或替换为 问号

我的

好消息是,没有理由需要调用此方法。这里完全不需要将msg的内容从QString转换为QByteArray。

问题在于:

QByteArray localMsg = msg.toLatin1();
引述:

以QByteArray形式返回字符串的拉丁文-1表示形式

如果字符串包含非拉丁字母1,则返回的字节数组未定义 人物。这些字符可能会被抑制或替换为 问号

我的

好消息是,没有理由需要调用此方法。这里完全不需要将msg的内容从QString转换为QByteArray