如何解决远程页面抓取中的乱码问题
问题 如何 远程 解决 页面 乱码 抓取
2023-06-13 09:13:51 时间
由于平时使用的网页文件基本上都是gb2312编码方式,如果通过xmlhttp控件读取的话,肯定会出现乱码问题,但是要把所有文件都改成utf-8编码,操作上比较麻烦。经过反复比较,我找到了相对实用的解决方法。
ff提供了overrideMimeType方法,可以指定返回值的编码,所以解决起来比较简单,只要把这个方法指向gb2312就可以了。对于IE,可以用vbs配合来作编码转换,用gb2utf8来转换接收到的二进制数据,其中利用到execScript方法来调用vbs的函数。
<body></body>
<script>
loadPage("index.htm")
function loadPage(url){
var xh=window.Event?new XMLHttpRequest():new ActiveXObject("Microsoft.XMLHTTP")
xh.open("GET",url,true)
if(window.Event)
xh.overrideMimeType("text/xml;charset=gb2312")
xh.onreadystatechange=function(){
if(xh.readyState!=4)
return
var v
v=window.Event?xh.responseText:window.gb2utf8(xh.responseBody)
alert(v)
}
window.gb2utf8=function(data){
var glbEncode=[],t,i,j,len
gb2utf8_data=data
execScript("gb2utf8_data = MidB(gb2utf8_data, 1)+" "", "vbscript")
t=escape(gb2utf8_data).replace(/%u/g,"").replace(/(.{2})(.{2})/g,"%$2%$1").replace(/%([A-Z].)%(.{2})/g,"@$1$2")
t=t.split("@")
i=0
len=t.length
while(++i<len){
j=t[i].substring(0,4)
if(!glbEncode[j]) {
gb2utf8_char = eval("0x"+j)
execScript("gb2utf8_char=Chr(gb2utf8_char)","vbscript")
glbEncode[j]=escape(gb2utf8_char).substring(1,6)
}
t[i]=glbEncode[j]+t[i].substring(4)
}
gb2utf8_data=gb2utf8_char=null
return unescape(t.join("%")).slice(0,-1)
}
xh.send(null)
}
</script>
相关文章
- ajax跨域解决方案_java如何解决跨域问题
- 记一个小的 SpringCloud CORS跨域问题 | 冷饭热炒
- MongoDB中null性能问题以及如何应对
- 网络问题排查实战经典案例汇总
- 线程通信问题练习
- 如何解决阿里云ssh远程连接短一段时间就会断掉的问题
- 教你如何监控Oracle Dataguard 日志传输状态监控问题
- 如何使用Redis锁处理并发问题详解
- Linux如何处理文件已删除但空间不释放的问题
- ORA-00911: 无效字符 问题和解决详解数据库
- 如何解决MySQL导出文件中出现问号的问题(mysql导出问号)
- 如何解决远程访问Oracle数据库的超时问题?(远程oracle超时)
- Oracle表主键未启用的问题解决方案(oracle主键未启用)
- 深度探索多线程Redis如何解决并发问题(多线程redis并发问题)
- 解决Oracle登录问题(oracle 不能登录)
- 安装PHP可能遇到的问题“无法载入mysql扩展”的解决方法
- MSSQL2008不能用IP登录问题如何解决
- 有关ajax的error与后台的异常问题解决