qDebug 输出 QString UTF-8 非 Ascii 符号,如 \uxxxx

qDebug outputs QString UTF-8 non-Ascii symbols as like \uxxxx

我正在尝试将 unicode 中的字符串 (QString) 转换为 utf-8。

qDebug 打印字符串如下:

"Fault code soap:Client: \u041F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044C \u0441 \u0438\u0434\u0435\u043D\u0442\u0438\u0444\u0438\u043A\u0430\u0442\u043E\u0440\u043E\u043C \u00AB16163341545811\u00BB \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D"

我试过像这样使用 QTextCodec 但它输出相同的不可读字符串:

QTextCodec *codec = QTextCodec::codecForName("UTF-8");
QString readableStr = QString::fromUtf8(codec->fromUnicode(str));

我做错了什么?

编辑:

我想知道发生了什么,但是当 qDebug 打印 QString...

时发生了

以下代码

qDebug() << QString::fromUtf8("тест") << "тест" << QString::fromUtf8("тест").toUtf8().data();

打印出来:

"\u0442\u0435\u0441\u0442" 已完结

我假设变量 str 的类型为 QString。您的 readableStr 与 str 具有相同的内容。 UTF-8 是一种使用 8 位字符的 Unicode 字符串编码,可以存储在 QByteArray 中。 qDebug 使用一些特殊函数在控制台或调试缓冲区中显示字符串,以帮助您理解字符串的内容。如果将 QString 放入任何 GUI 元素中,您将看到预期的可读内容。

我不知道 Qt 邮件列表上的确切线程,但最近引入了这种行为,因为 qDebug 最初是为了调试对象的内部状态。非 ASCII 字符现在这样显示,大多数人似乎不喜欢,但负责的开发人员或维护人员希望保持这种方式。