xmlhttp中文乱码之客户端解决方案-阿里云开发者社区

开发者社区> y0umer> 正文

xmlhttp中文乱码之客户端解决方案

简介: xmlhttp中文乱码之客户端解决方案 2006-10-23 01:45 使用ajax的人,最头疼的莫过于处理返回的中文乱码问题。如果可以在服务器进行操作的话,这个问题并不复杂。问题是有时候我们没有在服务器端进行操作的权利。
+关注继续查看
xmlhttp中文乱码之客户端解决方案
2006-10-23 01:45

使用ajax的人,最头疼的莫过于处理返回的中文乱码问题。如果可以在服务器进行操作的话,这个问题并不复杂。问题是有时候我们没有在服务器端进行操作的权利。例如,你想获取的是新浪的首页。你唯一能做的就是在客户端进行处理。

xmlhttp返回的对象可以是:responseText,responseXML和responseBody。其中responseText和responseXML是按照UTF-8的编码方式去抓取目标页面。responseBody返回的是目标页面的二进制数据流。对于那些不是以UTF-8编码的目标页面,我们是无法通过使用responseText,responseXML这两种方式获取无乱码的中文页面的。这时我们可以通过responseBody方式返回目标页面的二进制数据流,然后对数据流进行客户端的转化就可以。下面是我在网上找到的分别用vbscript和javascript解决这个问题的方法。

<script language="VBScript">
function bin2str(bin)
dim tmp,ustr
tmp=""
for i=1 to LenB(bin)-1
ustr=AscB(MidB(bin,i,1))
if ustr>127 then
i=i+1
tmp=tmp&chr(ustr*256+AscB(MidB(bin,i,1)))
else
tmp=tmp&chr(ustr)
end if
next
bin2str=tmp
end function
</script>


<script language="javascript">
var adTypeBinary = 1
var adTypeText = 2
function bytes2bstr(vin){
var st = new ActiveXObject("adodb.stream")
with (st){
Type = adTypeText
Open()
WriteText(vin)
Position = 0
Charset = "GB2312"
Position = 2
return ReadText
}
}
</script>

下面是我成功解决该问题的完整文件

<html>
<head>
<title>ajax encoding</title>
<script language="javascript" type="text/javascript">

var xmlhttp;
function CreateXMLHttpRequest() {
xmlhttp=false;
if(window.XMLHttpRequest) {
xmlhttp=new XMLHttpRequest();
if (xmlhttp.overrideMimeType) {
xmlhttp.overrideMimeType('text/xml');
}
} else if(window.ActiveXObject) {
try{
xmlhttp=new ActiveXObject("Msxml2.XMLHTTP");
} catch(e) {
try{
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
} catch(e) { }
}
}
}

function load() {
CreateXMLHttpRequest();
if(!xmlhttp) {
document.getElementById("error").innerHTML="对不起,服务器有故障,不能传送数据!";
return false;
} else {
xmlhttp.onreadystatechange=process;
URL="http://www.sina.com.cn/";
xmlhttp.open('post',URL,false);
xmlhttp.send(null);
}
}

function process() {
if(xmlhttp.readyState==4) {
if(xmlhttp.status==200) {
var info = gb2utf8(xmlhttp.responseBody);
document.write(info);
} else {
alert(xmlhttp.status);
}
}
}

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("%"));
}

</script>

</head>

<body onload="load()">
<div id="error"></div>
</body>

</html>

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
基于Windows环境下cmd/编译器无法输入中文,显示中文乱码解决方案
基于Windows环境下cmd/编译器无法输入中文,显示中文乱码解决方案           两个月前做C++课设的时候,电脑编译器编译结果出现了中文乱码,寻求了百度和大神们,都没有解决这个问题,百度上一堆解释是对编译器进行设置之类的,结果没有一个有效果,暑假学习了用Dos来开发Java程序,输入...
1199 0
Spring Boot项目字符集乱码解决方案
今天打开自己做的商品操作后台,在操作的过程中发现添加的商品乱码。折腾了一番,最终解决了,记录下解决方案。 1、我在本地开发的时候,进行操作是不会乱码的,但是部署到服务器上就乱码了,这个时候应该排除是项目的乱码问题。
723 0
python+soket实现UDP协议的客户/服务端中文聊天程序
没什么特别的东西,网上烂大街的C/S框架。(基于windows 7 + python 3.4)   为了实现中文聊天,我加入了一点修改: msg.encode('utf-8') # msg 为输入(且将要发送出)的信息 data.decode('utf-8') # data 为接收的信息 这样做的原因是 sendto 函数只能发送ASCII字符,不支持发送中文(在 python3 中,中文默认是unicode编码)。
1131 0
boost.xml_parser中文字符问题
当使用xml_parser进行读xml时,如果遇到中文字符会出现解析错误。 网上有解决方案说使用wptree来实现,但当使用wptree来写xml时也会出错。而使用ptree来写中文时不会出错。   综合以上信息,尝试使用ptree来写xml,而用wptree来读。
1105 0
python+soket实现 TCP 协议的客户/服务端中文(自动回复)聊天程序
【吐槽】 网上的代码害死人,看着都写的言之凿凿,可运行就是有问题。 有些爱好代码、喜欢收藏代码的朋友,看到别人的代码就粘贴复制过来。可是起码你也试试运行看啊大哥   【正文】 昨日修改运行了UDP协议的C/S聊天程序,可是TCP协议的怎么都不行。
1143 0
gdy
转载:Ununtu下中文乱码解决方案
转载: 添加中文字符编码: $sudo vim /var/lib/locales/supported.d/local #添加下面的中文字符集 zh_CN.GBK GBK zh_CN.GB2312 GB2312 zh_CN.
724 0
Maven项目中无法找到 xml文件或 properties文件等配置文件的解决方法
在初次使用 Maven 项目的时候总是会遇到一些比较奇异的问题 就比如说总是会报错:项目里的 **.xml 或 **.properties 配置文件无法找到 这时你去项目中的 classes 生成文件(target 或 out)中找,确实这些配置文件没有被编译 这是因为 ...
1366 0
my.httpReqeust安卓出现Alipay-Mobile-Proxy-Server(502_BAD_GATEWAY)的解决方案
报错原因: 出现Alipay-Mobile-Proxy-Server(502_BAD_GATEWAY)是因为目前 Android设备有安全代理,不允许请求非公网地址,如局域网 解决方案: 请使用公网请求地址。
507 0
+关注
y0umer
高级网络安全技术员
691
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载