| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1299 人关注过本帖
标题:vb6 的 winsock接收的网页文本为什么常常不正确?
只看楼主 加入收藏
leon2
Rank: 3Rank: 3
等 级:新手上路
威 望:7
帖 子:731
专家分:0
注 册:2005-3-18
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:2 
vb6 的 winsock接收的网页文本为什么常常不正确?
我在 vb6 下要用 winsock 来接收百度某个贴吧首页的html代码,用 senddata 这样发送请求:
Dim strReq As String
strReq = "GET /f?kw=广州&pn=" & CStr(lFrom) & " HTTP/1.1" & vbNewLine _
    & "Accept: text/html" & vbNewLine _
    & "Host: tieba.baidu.com" & vbNewLine _
    & "Connection: Close" & vbNewLine & vbNewLine
sckIndex.SendData strReq
然后在 sckIndex_DataArrival 事件中接收数据
Private Sub sckIndex_DataArrival(ByVal bytesTotal As Long)

    Dim strData As String
   
    ' 接收数据
    sckIndex.GetData strData
    sckIndex.Tag = sckIndex.Tag & strData
   
End Sub
结果在接收了html代码的 strData 中发现,有些 html标签 </a> 变成了 ?/a> 也就是有些字符显示不正确,但是其他的html标签就没有这种错。这是为什么?急求解,在线等~~
搜索更多相关主题的帖子: 百度 贴吧首页 广州 
2011-07-28 16:36
jiashie
Rank: 8Rank: 8
等 级:贵宾
威 望:10
帖 子:237
专家分:999
注 册:2009-4-30
收藏
得分:10 
建议在DataArrival事件中用Byte数组来接收数据。
如果需要转换为字符串,再用StrConv(bytData,vbUnicode)来转换。
不要直接用String。在接收一些128~255之间的字符时会有些诡异的事情。
2011-07-29 10:08
leon2
Rank: 3Rank: 3
等 级:新手上路
威 望:7
帖 子:731
专家分:0
注 册:2005-3-18
收藏
得分:0 
回复 2楼 jiashie
我已经发现问题了,原来是由于我接收的网页数据采用了 HTTP 1.1 的 chunk 编码所致的,因为我发现 HTTP 头有项 Transfer-encoding: chunked,上网一查就找到了处理的方法~~
原来因为网页数据按块传输,每一块之前都会插入8个字节来存储块的长度~~
某些块里面,这8个字节一不小心就把一个汉字的两个字节拆开了~于是就导致 StrConv 错误地解码了汉字和汉字以后的一串字符,包括 </a>~~
前辈说的不错,我是应该改用 Byte() 接收数据~~之后我做了一个函数把所有的 chunk 提取出来合成完整的数据,就ok了~~

呵呵,搞了半天原来是自己不熟悉 HTTP 1.1 的特性~~谢谢前辈!
以上
2011-07-29 10:20
快速回复:vb6 的 winsock接收的网页文本为什么常常不正确?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025993 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved