备忘:解决ajax获取页面直接显示乱码的方法

大家都知道,xmlhttp在通信时采用的是utf编码,而国内很多网页的信息都是采用gbk编码,所以当直接通过ajax去连接网页,并将获取到的信息直接显示的话就会出现乱码的现象,有些时候无法改变服务器端网页的编码(例如获取别的网站的天气预报信息),在这种时候就只能在客户端通过js做编码的工作了,下面这段js就是用于将服务器端返回的gbk编码字符串转换为utf编码字符串:
function gb2utf8(data){  
    
var glbEncode = [];  
    gb2utf8_data 
= data;  
    execScript(
"gb2utf8_data = MidB(gb2utf8_data, 1)""VBScript");  
    
var t=escape(gb2utf8_data).replace(/%u/g,"").replace(/(.{2})(.{2})/g,"%$2%$1").replace(/%([A-Z].)%(.{2})/g,"@$1$2");  
    t
=t.split("@");  
    
var i=0,j=t.length,k;  
    
while(++i<j) {  
        k
=t[i].substring(0,4);  
        
if(!glbEncode[k]) {  
            gb2utf8_char 
= eval("0x"+k);  
            execScript(
"gb2utf8_char = Chr(gb2utf8_char)""VBScript");  
            glbEncode[k]
=escape(gb2utf8_char).substring(1,6);  
        }
  
        t[i]
=glbEncode[k]+t[i].substring(4);  
    }
  
    gb2utf8_data 
= gb2utf8_char = null;  
    
return unescape(t.join("%"));  
}
这段代码也是从网上搜到的,具体是谁写的不清楚,所以在此未标明作者,如作者看到还请见谅。
有了这段代码后,就可以直接对返回的网页内容进行编码了:
var response=gb2utf8(response.responseBody);
经过这样的转码后所获得的页面内容就不会有乱码现象了;
当然,如果服务器端页面采用的是utf-8的编码那就根本不需要进行编码工作了。

posted on 2006-08-15 11:04 BlueDavy 阅读(5394) 评论(10)  编辑  收藏 所属分类: Java

评论

# re: 备忘:解决ajax获取页面直接显示乱码的方法 2006-08-15 13:43 emu

其实只要服务器返回的数据头声明了
<?xml version="1.0" encoding="gb2312"?>
xmlhttp(request)控件应该就可以正确解码了。

编码可以参考一下:
http://www.blogjava.net/emu/articles/31283.html
http://www.blogjava.net/emu/articles/31756.html   回复  更多评论   

# re: 备忘:解决ajax获取页面直接显示乱码的方法 2006-08-16 12:22 一农

@emu
1、楼主已经说了
“有些时候无法改变服务器端网页的编码(例如获取别的网站的天气预报信息),在这种时候就只能在客户端通过js做编码的工作了,”
2、这个方法在firefox应该不行,所以ajax的编码问题在浏览器里还是不能完全解决,只有等浏览器扩展,并且统一处理方法了。
execScript("gb2utf8_data = MidB(gb2utf8_data, 1)", "VBScript");   回复  更多评论   

# re: 备忘:解决ajax获取页面直接显示乱码的方法 2006-08-16 19:52 BlueDavy

@一农
在firefox下非常简单,可以调用xmlhttprequest来强制使用GBK编码,这样xmlhttprequest在发起请求和接收响应时就不再采用UTF-8了:
xmlHttpRequest.overrideMimeType("text/html;charset= gbk");  回复  更多评论   

# re: 备忘:解决ajax获取页面直接显示乱码的方法 2006-08-16 20:46 emu

@一农

1 “有些时候无法改变服务器端网页的编码(例如获取别的网站的天气预报信息),在这种时候就只能在客户端通过js做编码的工作了,”

这种情况下也无法通过客户端(浏览器)来做js编码(应为解码),因为有跨域限制,虽然网页可以用脚本设置document.domain,可是xmlhttp无法设置。如果用服务器程序建立http连接来获取这些第三方数据的话,也应该用后台服务器支持的解码方法而不是自己编码。

  回复  更多评论   

# re: 备忘:解决ajax获取页面直接显示乱码的方法 2006-08-16 20:48 emu

@BlueDavy

强!  回复  更多评论   

# re: 备忘:解决ajax获取页面直接显示乱码的方法 2006-08-18 15:47 @asan

to:一农

能具体给我说一说怎么弄嘛,我遇到这个问题没解决出来,很是恼火哦!  回复  更多评论   

# re: 备忘:解决ajax获取页面直接显示乱码的方法 2006-08-26 09:11 java人

请问你这段代码是在服务端跑还是在客户端跑?  回复  更多评论   

# re: 备忘:解决ajax获取页面直接显示乱码的方法 2006-08-26 10:13 BlueDavy

...客户端js  回复  更多评论   

# re: 备忘:解决ajax获取页面直接显示乱码的方法[未登录] 2007-05-20 20:25 无为

厉害,非常实用  回复  更多评论   

# re: 备忘:解决ajax获取页面直接显示乱码的方法[未登录] 2007-06-08 21:21 哈哈

我是用js文件调用页面..我的页面在单独的情况下可以显示没有乱码...但是在用js调用时就出现乱码....是什么问题.....那位大侠帮帮我啊....  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航:
 

公告

 









feedsky
抓虾
google reader
鲜果

导航

<2006年8月>
303112345
6789101112
13141516171819
20212223242526
272829303112
3456789

统计

随笔分类

随笔档案

文章档案

Blogger's

搜索

最新评论

阅读排行榜

评论排行榜