邓华

BlogJava 联系 聚合 管理
  48 Posts :: 0 Stories :: 149 Comments :: 0 Trackbacks
这回碰到的情况是prototype.js产生的序列化字符串传递到后台后,乱码的问题。

环境: prototype-1.4.0.js,gb2312编码的jsp ,后台:Linux 2.6.9, resin2., resin的启动参数加了 -Dfile.encoding=ISO-8859-1


在网页提交参数的时候。 用了:

var myAjax = new Ajax.Request(url, {method: 'post', parameters: Form.serialize($('converge')),onComplete: showResponse,onLoaded:doing,onLoading:doing});


其中Form.serialize($('converge')),是把converge表单中所有的字段,拼成method=xxx&type=sss的形式, 在prototype的函数中,会把key和value分别用encodeURIComponent 来把一个字符串转成utf-8的URL编码形式.

比如,“中文”会被编码成:%E4%B8%AD%E6%96%87

但该字符串传到后台时,会被识别成乱码. 用request.getParameter取到的字符串也是乱码,而不是本身的字符。

主要原因是%号,如果该串改成%22E4%22B8%22AD%22E6%2296%2287 也是可以识别的. 

解决方法: 在prototype文件中找到 encodeURIComponent  这段, 在encodeURIComponent 后,再将该字符串用escape方法再编码一次。 这时候传到后台,用request.getParameter,可以得到编码后的正确的字符串。即 %E4%B8%AD%E6%96%87 .

这时,可以用java.net.URLDecoder.decode(keyword,"UTF-8");  对这个字符串进行解码,从而得到正确的中文。



posted on 2006-11-09 09:52 邓华的碎碎念 阅读(470) 评论(0)  编辑  收藏

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


网站导航: