[问题][QT] readline空格后面被丢弃

楼主: liu2007 (è–¯)   2021-12-11 12:12:54
我的开发平台是 win7
工具是QT Creator
版本是Qt Core 5.15.2
我用QNetworkReply 去收网页内容并且分析
网页是很固定的纯文字内容
本来爬得很顺利的
以下是程式码
m_PageRequest.setUrl(QUrl{urlString});
QNetworkReply *reply = m_Manager.get(m_PageRequest);
QEventLoop event_loop;
QObject::connect(reply, SIGNAL(finished()), &event_loop, SLOT(quit()));
event_loop.exec();
QString headLine{reply->readLine()};
if(headLine.contains(SUCCESSED_HEADLINE)){
for(int i{0};i<23;i++) //我要的资料在剩下的第24行
reply->readLine();
QString raw{reply->readLine()};
parse(raw);
}
但是网页的文字里面包含某一个特定的名字的时候
程式就会出错。
这个名字从网页看起来只有三个字 XXX
把它复制上PTT来看也的只有三个字 XXX
但是在chorme的检视网页原始码里面就变成 XX X
中间空了一个空白
https://imgur.com/rH0j2nP
左边/uploader/后面那一串就是他的名字网页编码
本来正常情况下uploader后面还有资料是我需要的
但是只要遇到这个名字,字串却只有到名字中间的空白,空白后面的资料都没了
本来以为是跑到下一行,但并没有。
现在文章打到一半我在想是不是
QString raw{reply->readLine()};
在readLine() 的资料转换成 QString的时候,把那个空白当作结束符号
后面的就没有copy到raw 这个QString里面了
作者: nh60211as   2021-12-11 12:27:00
%00 是 null terminator ㄅ,我猜你说的空格其实就是'\0',所以readline()读到这就觉得读完了我讲错了,是QString(QByteArray)建构的时候读到'\0'觉得读完了我猜用 QByteArray::replace() 就好,如果你不打算把'\0' 当作他名字的一部分也可以先把整个文件读起来先把'\0'通通清掉,再用你一开始一行一行读的方法

Links booklink

Contact Us: admin [ a t ] ucptt.com