当AJAX遭遇GBK的尴尬

我在之前的一篇文章《struts,ajax乱码解决方案》中讲到ajax提交乱码的解决方案。这个方案在utf-8的编码下,不管提交或获取都没有变成乱码,但当你的客户端是GBK编码时提交就会出现乱码(获取时不会)。BeanSoft 说用encodeURIComponent保险,呵呵,这个不是我没试过,从一开始我就试过了encodeURIComponent ,escape,encodeURI,但最后出来的结果都没我说的那种好。它们使用的结果如下:
escape  后提交,getParameter出来的是null,
encodeURI 后提交,和没使用用的时候是一个样,
encodeURIComponent  后提交,包含特殊字符的请求都无法取得正确的值。

使用GBK编码提交后的数据在使用服务器端用new String( value.getBytes("gbk"), "utf-8")后部分可以恢复正确的中文,但有一部分无法恢复,这个原因估计是AJAX提交时设置了编码为UTF-8,但我字符的实际编码是GBK,所以在提交用用request.getParameter()获得的数据是用UTF-8的编码在GBK的字符集中找字符,像我在《struts,ajax乱码解决方案》中说的那样,UTF-8的编码可能有1位2位或3位16进制,如果它这个编码刚好是2位的话,那在GBK可以找到正确的字符(但并不是正确的),但如果是三位呢?那就惨了,它后面的字符全部就会变成乱码,比如%6D%51%C5 %E5%23%1C分别表示一个UTF-8编码的中文字符,那如果在GBK中,就会把它当成三个字符去查找,当然肯定是找不到的,有些找到的也是你读都读不出来的。用new String( value.getBytes("gbk"), "utf-8")后就是用GBK的编码在UTF-8的字符集中查找字符,如果刚好你的字符在UTF-8编码中全部是2位的话,那就能正确恢复,如果不是的话。。。。。。

现在还没找到在GBK编码下比较好的解决方案,但今天看到BeanSoft 的一篇文章《JSP 中 AJAX 的表单提交中文问题的简单解决方案》说到使用BASE64的方法,这个倒是没有试过,过两天放假的时候就试一下,如果成功了就跟大家共享一下。

PS:因为项目用也用到了FILTER,在提交后第一时间会被改变字符编码,不知道是不是这个增加的乱码解决的复杂性,当然我也试过在getParameter之前改变它的编码回utf-8,但结果是一样的。

91000.html

errorfun 2006-12-30 13:34 发表评论
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值