当前位置: 首页 > 图文教程 > 网络编程 > ASP > XMLHTTP Get HTML页面时的中文乱码之完全客户端Script解决方案

ASP
ASP正则表达式技巧
ASP Access实现网站计数器(访问量)
ASP新闻分页,将一篇过长的文章分页,生成静态页面
一些关于asp 购物车的想法
一个sql查询器,自动画表格填字段
ASP实现文件直接下载的代码
把网页中的(电话,qq等数字)生成图片的ASP程序
asp长文章用分页符来分页显示
Asp函数介紹(37个常用函数)
ASP中的面向对象类
分页实现方法的性能比较
asp ajax跨域提交数据
asp修改文件和文件夹的名字的代码
ASP 多关键词查询实例代码
asp被杀毒软件误删的解决方法
asp 多关键词搜索的简单实现方法
asp 根据IP地址自动判断转向分站的代码
asp dictionary对象的用法
ASP 千万级数据分页的存储过程
ASP隐藏真实文件的下载功能实现代码

ASP 中的 XMLHTTP Get HTML页面时的中文乱码之完全客户端Script解决方案


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-03   浏览: 247 ::
收藏到网摘: n/a

 

    常有人说,他们在使用XMLHTTP过程中,总是为中文乱码的问题烦恼。本人查阅了一些资料,结果令我失望,大家都是使用ASP服务器端技术解决该问题。
    先分析一下为何会出现中文乱码的问题。原因很简单:XMLHTTP得到Response时假定Response是UTF8编码的,它把含GB2312编码的HTML当成UTF8格式,因此,出现了中文乱码。
    那么,除了使用ASP服务器端脚本技术外,就没有客户端的解决办法吗?答案是:有!
    本人使用VBScript客户端脚本,成功实现了不使用ASP,解决了XMLHTTP 抓取 HTML页面时出现中文乱码的问题。
    为何使用VBScript,而不是大家常用的JScript?XMLHTTP的responseBody返回的是一个unsigned bytes数组。VBScript提供了许多用于操作字符串和格式化数据的函数,以及访问安全数组的方法。这些函数或方法在JScript中并不存在。这里我们需要使用VBScript的内置函数:MidB、AscB、LenB等,来访问responseBody。
    说句题外话,我不是在强调VBScript比JScript好,而是二者都有自己的特点。第一次在CSDN上写文章,谢谢大家支持。写这边文章有两个目的:一、锻炼自己;二、希望大家遇到问题时,要学会分析问题,做到有的放矢,知其然也知其所以然。
    我给出代码Test.htm,它包括了获取自身代码和获取其他网页代码两种应用,具体脚本如下:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- 作者:小林,[email protected] -->
<HTML>

<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=gb2312">
</HEAD>

<script language=VBScript>

Function bytes2BSTR(vIn)
    strReturn = ""
    For i = 1 To LenB(vIn)
        ThisCharCode = AscB(MidB(vIn,i,1))
        If ThisCharCode < &H80 Then
            strReturn = strReturn & Chr(ThisCharCode)
        Else
            NextCharCode = AscB(MidB(vIn,i+1,1))
            strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode))
            i = i + 1
        End If
    Next
    bytes2BSTR = strReturn
End Function

Function viewSource1()
 dim XmlHttp
 set XmlHttp = CreateObject("Microsoft.XMLHTTP")
 XmlHttp.Open "GET", document.location.href, false
 XmlHttp.setRequestHeader "Content-Type","text/XML"
 XmlHttp.Send
 
 dim html
 html = bytes2BSTR(XmlHttp.responseBody)
 msgbox html
End Function

Function viewSource2()
 dim XmlHttp
 set XmlHttp = CreateObject("Microsoft.XMLHTTP")
 XmlHttp.Open "GET", "http://www.google.com", false
 XmlHttp.setRequestHeader "Content-Type","text/XML"
 XmlHttp.Send
 
 dim html
 html = bytes2BSTR(XmlHttp.responseBody)
 msgbox html
End Function

</script>

<BODY bgcolor=gainsboro style='border:1pt solid white'>
<TABLE class=text>
 <tr>
  <td class=text>XMLHTTP Get HTML页面时的中文乱码之完全客户端Script解决方案</td>
 </tr>
 <tr>
  <td class=button><button onclick=viewSource1()>查看自身的网页代码</button></td>
 </tr>
 <tr>
  <td class=button><button onclick=viewSource2()>查看google主页代码</button></td>
 </tr> 
</TABLE>
</BODY>
</HTML>