VB.Net抓取网页乱码的解决方法
2008-10-23 15:41
936 查看
在调试VB.Net调用Microsoft.XMLHttp组件抓取网页时,遇到了抓取中文字符出现乱码,经测试若网页meta标签charset为utf-8的网页不会乱码,而charset为Gb2312的则会出现乱码,本文提供了一个完整的解决方法,希望对研究VB.Net抓取网页或者VB.Net实现采集功能的朋友有所帮助。
以下为VB.Net抓取网页的函数LobDotCn 注:url_Link为抓取的目标页面 IsGb2312为是否Gb2312字符
Public Function LobDotCn(ByVal url_Link As String, ByVal IsGb2312 As Boolean)
On Error Resume Next
Dim XmlHttp As Object
XmlHttp = CreateObject("Microsoft.XMLHttp")
XmlHttp.Open("POST", url_Link, False)
XmlHttp.Send()
Dim WebContent As Object
Dim Str_WebContent As String
If IsGb2312 Then
WebContent = XmlHttp.ResponseBody
Str_WebContent = System.Text.Encoding.Default.GetString(WebContent)
Else
WebContent = XmlHttp.ResponseText
Str_WebContent = WebContent.ToString
End If
XmlHttp = Nothing
LobDotCn = Str_WebContent
End Function
调用方式 :
变量 = LobDotCn("http://www.lob.cn", True) '抓取 Gb2312网页
变量 = LobDotCn("此处填写网址", False) ' 抓取utf-8网页
附Microsoft.XMLHttp组件的相关说明:
Open( bstrMethod, bstrUrl, varAsync, bstrUser, bstrPassword )
bstrMethod: 数据传送方式,即GET或POST。
bstrUrl: 服务网页的URL。
varAsync: 是否同步执行。缺省为True,即同步执行,但只能在DOM中实施同步执行。用中一般将其置为False,即异步执行。
bstrUser: 用户名,可省略。
bstrPassword:用户口令,可省略。
Send( varBody )
varBody:指令集。可以是XML格式数据,也可以是字符串,流,或者一个无符号整数数组。也可以省略,让指令通过Open方法的URL参数代入。
setRequestHeader( bstrHeader, bstrvalue )
bstrHeader:HTTP 头(header)
bstrvalue: HTTP 头(header)的值
如果Open方法定义为POST,可以定义表单方式上传:
xmlhttp.setRequestHeader( "Content-Type", "application/x-www-form-urlencoded")
XMLHTTP属性:
onreadystatechange:在同步执行方式下获得返回结果的事件句柄。只能在DOM中调用。
responseBody: 结果返回为无符号整数数组。
responseStream: 结果返回为IStream流。
responseText : 结果返回为字符串。
responseXML: 结果返回为XML格式数据。
以下为VB.Net抓取网页的函数LobDotCn 注:url_Link为抓取的目标页面 IsGb2312为是否Gb2312字符
Public Function LobDotCn(ByVal url_Link As String, ByVal IsGb2312 As Boolean)
On Error Resume Next
Dim XmlHttp As Object
XmlHttp = CreateObject("Microsoft.XMLHttp")
XmlHttp.Open("POST", url_Link, False)
XmlHttp.Send()
Dim WebContent As Object
Dim Str_WebContent As String
If IsGb2312 Then
WebContent = XmlHttp.ResponseBody
Str_WebContent = System.Text.Encoding.Default.GetString(WebContent)
Else
WebContent = XmlHttp.ResponseText
Str_WebContent = WebContent.ToString
End If
XmlHttp = Nothing
LobDotCn = Str_WebContent
End Function
调用方式 :
变量 = LobDotCn("http://www.lob.cn", True) '抓取 Gb2312网页
变量 = LobDotCn("此处填写网址", False) ' 抓取utf-8网页
附Microsoft.XMLHttp组件的相关说明:
Open( bstrMethod, bstrUrl, varAsync, bstrUser, bstrPassword )
bstrMethod: 数据传送方式,即GET或POST。
bstrUrl: 服务网页的URL。
varAsync: 是否同步执行。缺省为True,即同步执行,但只能在DOM中实施同步执行。用中一般将其置为False,即异步执行。
bstrUser: 用户名,可省略。
bstrPassword:用户口令,可省略。
Send( varBody )
varBody:指令集。可以是XML格式数据,也可以是字符串,流,或者一个无符号整数数组。也可以省略,让指令通过Open方法的URL参数代入。
setRequestHeader( bstrHeader, bstrvalue )
bstrHeader:HTTP 头(header)
bstrvalue: HTTP 头(header)的值
如果Open方法定义为POST,可以定义表单方式上传:
xmlhttp.setRequestHeader( "Content-Type", "application/x-www-form-urlencoded")
XMLHTTP属性:
onreadystatechange:在同步执行方式下获得返回结果的事件句柄。只能在DOM中调用。
responseBody: 结果返回为无符号整数数组。
responseStream: 结果返回为IStream流。
responseText : 结果返回为字符串。
responseXML: 结果返回为XML格式数据。
相关文章推荐
- ASP.NET MVC中解析淘宝网页出现乱码问题的解决方法
- php用file_get_contents方法抓取网页数据出现乱码的解决方法
- python抓取中文网页乱码通用解决方法
- Node.js抓取中文网页乱码问题和解决方法
- Node.js抓取中文网页乱码问题和解决方法
- php file_get_contents抓取Gzip网页乱码的三种解决方法
- PHP中使用file_get_contents抓取网页中文乱码问题解决方法
- ASP.NET MVC中解析淘宝网页出现乱码问题的解决方法
- PHP中使用file_get_contents抓取网页中文乱码问题解决方法
- php file_get_contents抓取Gzip网页乱码的三种解决方法
- 网页采用UTF-8编码,传递汉字参数时出现乱码解决方法
- mysql 网页乱码的解决方法
- html乱码原因与网页乱码解决方法
- Asp.net导出Excel乱码的解决方法
- ASP.NET抓取网页内容的方法
- asp.net 抓取网页源码三种实现方法
- ASP.NET连接ORACLE数据库出现乱码的解决方法
- Asp.Net Url 传值出现乱码的解决方法(包括js传值)
- asp.net web页传参数为汉字时,会失败,有些汉字会变成乱码,解决方法如下:
- ASP.NET:Form提交中文乱码的解决方法总结