0

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

qDebug 打印这样的字符串:

"故障码soap:客户端:\u041F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u0441\u0438\u0434\u0435\u043D\u0442\u0438\u042\u0438\u04 "

我试过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”

4

2 回答 2

1

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

于 2015-08-04T12:27:23.540 回答
1

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

于 2015-08-10T22:45:58.093 回答