ASP下Ajax的GB2312编码问题

被编码问题困扰了1天了,找到了几个解决方案,虽然问题没有最终解决,但可以为以后编写ajax应用提供一些参考。

 


 

废话少说,先简要描述一下问题所在:

JS 内部使用UTF-8 编码,本身js用GB2312书写。ASP 输出使用GB2312,Codepage = 936

JS -> ASP ,escape后的程序以utf-8编码发送给asp,asp端必须进行编码转换。

ASP -> JS ,asp输出的编码为gb2312,js默认以UTF-8接收并显示。可以用Js的GB2UTF8函数在客户端进行编码转换。转换后之前js提交的utf8参数乱码,asp内部的中文字符串正常显示

 


 

解决方案如下:

1. 服务器端纯用utf-8编码,设置response.contentType="text/html;charset=utf-8" 并且设置html页面的meta头为utf-8编码。js端使用escape或者encodeURIComponent 对参数进行编码均可。

优点:不用再被编码问题困扰

缺点:

  1. asp调试比较痛苦,输出的asp错误均为gb2312编码……在utf-8页面上显示乱码。
  2. 如果是在原有的系统上修改,凡是含有中文字符变量的包含文件,都必须以utf-8另存一份出来

2. 搜到的一个还不错的方法。但是仍然因为往现有的系统中套用麻烦而舍弃。引用自 http://www.dc9.cn/post/295.html

js端

使用下面的方法进行编码

< script language = " javascript " >
encodeURIComponent(escape(xxxxxxx));
</ script >

 

asp端

Response.CodePage=936
Response.Charset="gb2312"

 使用以下函数进行解码

< script language = " javascript "  runat = " server " >

  
function  vbsunescape(source) {
    
return unescape(source);
  }


</ script >

优点:近乎于完美解决乱码问题,包括发送和接收以及页面回显

缺点:

  1. 服务器端需要混用javascript编码,服务器端程序效率低
  2. 每个参数都需要使用 vbsundescape 转换一次

这样就已经基本可以了。

 


 

小结:

以上两种方法均不适合现有系统的改造……于是决定放弃ajax计划……

 


 

后记:

最后还是找到了方法,虽然有点衰~

1. 关于asp->js输出乱码问题:

因为对于xml,XMLHttp可以根据其指定编码自动转换,所以就利用这个来做。在asp页面清除掉原来的信息输出,改为:

< %
response.codepage
= " 936 "
response.ContentType 
=   " text/xml;charset=gb2312 "
response.charset(
" gb2312 " )
Response.Clear
%
><?xml version="1.0" encoding="GB2312"?>
<Contents>
<Content>
<![CDATA[

尾部添加:

]]>
</Content>
</Contents>

用XMLHttpRequest.responseXML获取得到的数据, XHR.responseXML.selectSingleNode("Contents/Content") 下的第一个nodeType==4 的 childNode 的nodeValue就是返回的代码……用什么套都无所谓了现在……关于查找这个CDATA区块的方法,从XPath里可能还有更好的方法,现在暂用程序循环获得:

for ( var  i = 0 ;i < content.length;i ++ )
    
if (content[i].nodeType == 4 ) {result = content[i].nodeValue;}

2. 关于提交的乱码问题:

之前一直依赖于使用的MochiKit框架的queryString方法。后将其修改,在 MochiKit/Base.js 中 862行的 queryString函数复制为queryString2 ,修改 892 行 的 rval.push中 的 urlEncode 为 escape 即可。并在大约1000行左右的 MochiKit.Base.EXPORT 数组中的适当位置添加 "queryString2" 使之成为全局函数。

 以上二者结合即可完全搞定编码问题

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值