QT软件中QByteArray转QString,死活转不了

hookover 发布于 2015/08/09 01:52
阅读 2K+
收藏 0
QT creator 3.4.2
qt 5.5.5 msvc 2013
MinGW
windows 7

我使用QNetworkReply readAll函数得到QByteArray网页数据,转换为QString类型
通过qDebug()输出,输出的结果为空
如:QByteArray data=pRepy->readAll();
qDebug()<<"toStaring:"<<QString(data);   //整行不显示,包括toString

QTextBrowser view;
view.append(data);
qDebug()<<"toHtml"<<view.toHtml();   //不显示,包括toHtml字符串
qDebug()<<"totoPlainText"<<view.toPlainText();   //不显示,包括toPlainText字符串

qDebug()<<QString(QString::fromLatin1(data));  //不显示
qDebug()<<QString(QString::fromLocal8Bit(data)); //不显示
qDebug()<<QString(QString::fromStdString(data)); //不显示
qDebug()<<QString(QString::fromUtf8(data)); //不显示
以上方法全不显示
std::string str=data.toStdString();
**cout<<str<<endl; //显示正确**
以下全不显示
qDebug()<<QString(data);
qDebug()<<(QString)data;
qDebug()<<QString(QString::fromLatin1(str.c_str()));
qDebug()<<QString(QString::fromLocal8Bit(str.c_str()));
qDebug()<<QString(QString::fromStdString(str.c_str()));
qDebug()<<QString(QString::fromUtf8(str.c_str()));
qDebug()<<"str:"<<QString::fromLatin1(data);
qDebug()<<"str:"<<QString::fromLocal8Bit(data);
qDebug()<<"str:"<<QString::fromUtf8(data);
qDebug()<<"str:"<<QString::fromStdString(str);


注:有个别会显示 "",大多数完全不显示,

我也怀疑是qDebug()的问题,所以我做了个这样的正则表达式,一次没匹到成功过,问题是每个网页都是这种格式
QRegExp rx(QString("<html>\"(.*)\"</html>"));
int pos=qstr.indexOf(rx);


另外  QByteArray data=pRepy->readAll()
data数据传到UI界面,放到QTextBrowser控件里,在界面上显示正常
QTextBrowser v.append(data)  //显示正常

获取的网页数据,有很多网站的数据流都无法转换成QString类型,我使用qDebug()结果都是空,请问有解决的办法吗?

加载中
0
公孙二狗
公孙二狗

新版本的 qDebug() 有 Bug

maxos
maxos
回复 @BAONIU : 我怎么可以,Qt 5.5.0-VS2013版本,可以转换
hookover
hookover
谢谢,我发现确实是qDebug的问题,正则写错了,能匹配上
hookover
hookover
转换后的内容用正则表达式匹配不上,怎么回事
0
枫听烨歌
枫听烨歌

这种问题最好去官方论坛问,能得到很权威的回答,5.5也出了不是很久,应该还是有些问题的。

同样,也可以参考一下官方提供的文档。如果文档和论坛都解决不了你的问题,那么就去看看Qt提供的源码吧。真的要细究,还真得去看源码。 http://download.qt.io/official_releases/qt/5.5/5.5.0/single/qt-everywhere-opensource-src-5.5.0.zip

hookover
hookover
谢谢,我发现确实是qDebug的问题
0
maxos
maxos
亲测可以转换,版本Qt 5.5.0-VS2013版本
hookover
hookover
也可能是Qt5.5.5的bug,反正80%的汉字网站是没法转换的
hookover
hookover
你多试几个网页,最好要带中文编码的网页
0
lieefu
lieefu
这是因为,你获取网页内容的服务端,使用gzip格式把网页内容压缩了,请解压后再toString。或者把 request.setRawHeader("Accept-Encoding","gzip,deflate,sdch"); 这样的设置注释掉,告诉服务端,你的程序不接受gzip压缩格式。
hookover
hookover
受教受教
0
hookover
hookover
最后发现,确实是qDebug的问题,不影响操作使用
0
wzugang
wzugang
QT转码很坑的,可以用C转啊
hookover
hookover
我C++都不怎么会呀
返回顶部
顶部