首页 | 站长免费中心 | 新手上路 | 网站运营 | 网页制作 | 图片设计 | 动画设计 | 网页编程 | 网页特效 | 本站专题 | 虚拟主机 | 域名注册 | 网站建设 | 程序下载
       免费空间资源 | 新闻咨询 | 免费域名 | 免费网盘 | 网站推广 | 网站策划 | 建站经验 | 网站优化 | 网页代码 | 源码下载 | 音乐小偷 | 网络赚钱 | 论坛交流
网站建设
网站建设
虚拟主机
虚拟主机
域名注册
域名注册
711网络首页
站长工具
站长工具
网站源码
网站源码
站长论坛
站长论坛

 711网络 网页编程ASP代码

ASP下Ajax的GB2312编码问题

来源: 互联网    日期:2008-10-7
 

被编码问题困扰了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" 使之成为全局函数。

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



更多的ASP下Ajax的GB2312编码问题请到论坛查看: http://BBS.TC711.COM



【 双击滚屏 】 【 评论 】 【 收藏 】 【 打印 】 【 关闭 】 来源: 互联网    日期:2008-10-7   

发 表 评 论
查看评论

  您的大名:
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款
认证编码: 刷新验证码
点评内容: 字数0
  精品推荐  
  本月推荐  
  友情赞助  

关于我们 | 联系我们 | 广告投放 | 留言反馈 | 免费程序 | 虚拟主机 | 网站建设 |  网站推广 |  google_sitemap baidu_sitemap RSS订阅
本站所有资源均来自互联网,如有侵犯您的版权或其他问题,请通知管理员,我们会在最短的时间回复您
Copyright © 2005-2015 Tc711.Com All Rights Reserved 版权所有·711网络   蜀ICP备05021915号
110网监备案 信息产业备案 不良信息举报