我正在尝试将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”тесттест
答案 0 :(得分:1)
我假设变量str的类型为QString。您的readableStr具有与str相同的内容。 UTF-8是使用8位字符的Unicode字符串的编码,可以存储在QByteArray中。 qDebug使用一些特殊函数在控制台或调试缓冲区中显示字符串,以帮助您理解字符串的内容。如果在任何GUI元素中放置QString,您将看到预期的可读内容。
答案 1 :(得分:1)
我不知道Qt邮件列表上的确切线程,但最近引入了这种行为,因为qDebug最初是用于调试对象内部状态。非ASCII字符现在就像这样,大多数人似乎都不喜欢,但负责的开发人员或维护人员希望保持这种方式。