【发布时间】:2015-10-26 19:06:36
【问题描述】:
我正在尝试将 unicode 中的字符串 (QString) 转换为 utf-8。
qDebug 打印这样的字符串:
"故障码soap:客户端:\u041F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u0441\u0438\u0434\u0435\u043D\u04442\u0438\u \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有什么? -
有趣的事情...
qDebug() << QString::fromUtf8(yourOutput);使用 linux 和 utf-8 作为源的默认编解码器打印了我Fault code soap:Client: Пользователь с идентификатором «16163341545811» не найден。您的QTextCodec代码没有任何改变。 -
嗯,我在 linux 上:locale -a 输出:C POSIX ru_RU.utf8 我主要设置:QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));跨度>
-
在我看来,字符串已经采用
UTF-8编码。您是否尝试将UTF-8转换为UTF-8两次?还要确保您的控制台设置为UTF-8。
标签: c++ qt utf-8 qstring qdebug