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

时间:2015-08-04 11:35:03

标签: c++ qt utf-8 qstring qdebug

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

qDebug打印这样的字符串:

  

“故障代码肥皂:客户端:\ u041F \ u043E \ u043B \ u044C \ u0443 \ u043E \ u0432 \ u0430 \ u0442 \ u0435 \ u043B \ u044C \ u0441 \ u0438 \ u0434 \ u0435 \ u043D \ u0442 \ u0438 \ u0444 \ u0438 \ u043A \ u0444 \ u0442 \ u043E \ u0443 \ 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”тесттест

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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