日期:2014-05-18  浏览次数:20661 次

关于jquery ajax提交乱码的问题
我利用jquery的ajax函数向服务器端发送了一个post请求,请求的字段中有一些中文,在action(struts1)中接收参数的时候发生了乱码的问题.
首先我的js文件本身是gbk编码的在页面引入的时候也是gbk,即:

<script type="text/javascript" src="../js/xx.js" charset="GBK"></script>

jquery ajax提交的content type我查了下默认是utf-8
也就是说,我在服务器dispatchaction中接收参数的时候,也应该自动为我转成utf-8,但是现在乱码了
我自己怀疑的原因,首先这个dispatchaction是有一个校验validateform的,action中的request是经过校验转发过来的,我不清楚这是否有影响,期望高手能告诉我一下,多谢了.

------解决方案--------------------
jsp页面、js文件、request 要保持编码一致。
------解决方案--------------------
前台使用 

window.encodeURI(window.encodeURI("str"));

进行编码,然后后台再去解码,使用

String cityParam = request.getParameter("city");//前台参数
String city = "";
try {
city = java.net.URLDecoder.decode(cityParam,"UTF-8");//解码
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}

------解决方案--------------------
引用:
Quote: 引用:

前台使用 

window.encodeURI(window.encodeURI("str"));

进行编码,然后后台再去解码,使用

String cityParam = request.getParameter("city");//前台参数
String city = "";
try {
city = java.net.URLDecoder.decode(cityParam,"UTF-8");//解码
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}


其实这个问题我是解决了,我是这么解决的,

String summary = new String(request.getParameter("summary").getBytes("iso8859_1"),"utf-8");

但是我不理解的是,我其他html/js都是这样提交的,其他的功能却没有这个问题,而且我看到这是iso8859-1,这明显不对!,因为项目里面用filter做了编码处理.
所以我怀疑是struts1校验form的问题,提交给form的时候,因为struts1肯定用request.getParameter()取过数据了,再次转发的时候又变成iso88569-1了,不知道我的怀疑对不对





这个我也不太了解,我查了一下,struts提交表单时没有设置编码,默认是按照ISO-8859-1编码提交的