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