解决asp采集utf-8中文网页显示为乱码的问题

修行者 编程开发 6139浏览 5评论

在写asp小偷程序的时候碰到了个问题,就是采集utf-8中文网页会出现乱码,我对asp也不是很熟悉,捣鼓了半天才解决了这个难题,现在把asp抓取utf-8网页乱码问题的解决方法记录下来方便以后用得上。

我们知道asp中要采集数据就是利用XMLHTTP组件调用其它网站上的网页,比如要调用我博客首页的html内容就应该这样写

Dim Url,Html 
Url="http://www.xxzh.org" 
Html = getHTTPPage(Url) 
Response.write Html

一般url为变量的,这里只是以我博客为例,再来是获取页面源代码函数,返回值getHTTPPage是url目标网页的html代码,我的博客是utf-8编码的,而“getHTTPPage=bytesToBSTR(Http.responseBody,"utf-8") ”这句就是接收utf-8数据并转换。

function getHTTPPage(url) 
dim Http 
set Http=server.createobject("MSXML2.XMLHTTP") 
Http.open "GET",url,false 
Http.send() 
if Http.readystate<>4 then  
exit function 
end if 
getHTTPPage=bytesToBSTR(Http.responseBody,"utf-8") 
set http=nothing 
if err.number<>0 then err.Clear  
end function

因为直接用xmlhttp调用有中文字符的网页得到的将是乱玛,所以我们要通过adodb.stream组件进行转换,下面是编码转换函数。

Function BytesToBstr(body,Cset) 
dim objstream 
set objstream = Server.CreateObject("adodb.stream") 
objstream.Type = 1 
objstream.Mode =3 
objstream.Open 
objstream.Write body 
objstream.Position = 0 
objstream.Type = 2 
objstream.Charset = Cset 
BytesToBstr = objstream.ReadText  
objstream.Close 
set objstream = nothing 
End Function

可是即使这样发现获取来的页面依然是乱码,调试了半天找到一个简单的方法就是将采集内容里的“<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />”用replace替换成“<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />”,这样一来等于将目标站的utf-8编码页面采集回来后以GB2312编码显示,自然也就不存在乱码了。

可是在UTF-8已经成为网页编码主流的今天,utf-8还是大部分人的首选的,难道getHTTPPage获取来的页面就不能以utf-8编码显示么?这个问题我在网上找了许久没找到解决办法,后来想到虽然采集来的页面源码确实是utf8编码的,但是本身这个asp文件并没有声明是什么编码,是不是因为这样才会将抓取来的utf-8编码内容以gb2312编码显示呢?于是我试着在头部加入下面这段代码强制页面编码为utf-8。

<%Session.CodePage=65001%>
<%Response.charset = "utf-8"%>

再次刷新页面就发现采集来的页面已经能正常显示了,终于asp采集乱码问题完美解决。

修行者

本文地址http://xxzh.org/biancheng/asp-caiji-utf8-zhongwen-luanma.html

版权说明:如非注明,本站文章均为 修行者博客 原创,转载请注明出处和附带本文链接。

已有5位小伙伴发表了看法
  1. 意林

    意林游客 回复Ta 还是不行了,求指点 QQ632598725

  2. 管家婆彩图

    管家婆彩图游客 回复Ta 还是不懂啊!难啊!

  3. 徐州广告片制作

    徐州广告片制作游客 回复Ta 现在最常用的是php

  4. 江西建工路桥

    江西建工路桥游客 回复Ta 现在貌似不用了吧。

  5. 垂直绿化

    垂直绿化游客 回复Ta 现在都不适用asp了。都php的

发表评论(友情提示:可直接按Ctrl+Enter提交评论)
来宾的头像
访客