我正在尝试将unicode中的字符串(QString)转换为utf-8。
qDebug打印这样的字符串:
"故障代码soap:客户端:u041Fu043Eu043Bu044Cu0437u043Eu0432 u0442u0435u043Bu044C u0442u0438 u0438u043Au0430u0442u043E u043E u04c u043Du0435 u043Du0430u0439u0434u0435u043D"
我尝试过使用QTextCodec
这样,但它输出相同的不可读字符串:
QTextCodec *codec = QTextCodec::codecForName("UTF-8");
QString readableStr = QString::fromUtf8(codec->fromUnicode(str));
我做错了什么?
编辑:我想知道发生了什么,但它发生时,qDebug
打印QString
…
以下代码
qDebug() << QString::fromUtf8("тест") << "тест" << QString::fromUtf8("тест").toUtf8().data();
打印出:
"u0442u0435u0441u0442" тест тест
我不知道Qt邮件列表上的确切线程,但这种行为是最近引入的,因为qDebug最初是为了调试对象的内部状态。非ASCII字符现在是这样的,大多数人似乎不喜欢,但开发人员或维护人员希望保持这种方式。
我假设变量str的类型为QString。你的readableStr具有与str相同的内容。UTF-8是使用8位字符的Unicode字符串编码,可以存储在QByteArray中。qDebug使用一些特殊的函数在控制台或调试缓冲区中显示字符串,以帮助您理解字符串的内容。如果在任何GUI元素中放置QString,您将看到预期的可读内容。