日期:2014-05-17  浏览次数:20916 次

spring乱码问题,菜鸟求教
这是个springMVC传参 出现乱码问题
我没有使用JQuery,因为项目比较小,自己写了个JS
先来说说我的设置,最后说问题:

function postSend(url, params) {
var _post = document.createElement("form");
_post.action = url;
_post.method = "POST";
_post.style.display = "none";
document.body.appendChild(_post);
_post.submit();
return _post;
}


接着,我在web.xml中加了过滤:
<filter>
<description>字符集过滤器</description>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<description>字符集编码</description>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>


之后,我在JSP中的头部写了page:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" 
contentType="text/html; charset=UTF-8"%>
<%
String queryRole  = "查询角色" ;
String deleteRole = "删除角色" ;
String alterRole  = "修改角色" ;
String createRole = "新建角色" ;
%>
.......略去次要的 ......
----------------------JS ----------
function createRole(){
alert("<%=createRole%>");
postSend("<%=basePath%>havePowerCreateRole.do?funOptType="+"<%=createRole%>");
}


最后,我在后台接收:

@RequestMapping("havePowerCreateRole")
public Object havePowerCreateRole(String funOptType ,HttpServletRequest req){

ModelAndView mv = new ModelAndView();
HttpSession session = req.getSession();
List<String> funOptTypeList = (List<String>) session.getAttribute("funOptTypeList");
for( int i=0 ; i<funOptTypeList.size() ; i++ ){
if( funOptTypeList.get(i).equalsIgnoreCase(funOptType) ){
mv.setViewName("jsp/body/admin/createRole");
return mv;
}
}
  ModelAndView error = mv ;
  error .addObject("errorTip", havePowerCreateRoleErrorTip);
  error.setViewName("jsp/error");
  mv = null ;
  return error ;
}

问题:
问题来了,我在前台跳转前特地alert("<%=createRole%>");,显示出了正确的中文字,
但是真正跳转后,接受者havePowerCreateRole接收到的参数funOptType确是乱码,
问题百思不得其解,求教! 
------解决方案--------------------
postSend("<%=basePath%>havePowerCreateRole.do?funOptType="+encodeURI("<%=createRole%>"));
加上encodeURI编码,后台如果还乱码用URLDecoder.decode
------解决方案--------------------
不要在queryString中传递中文,问题太多了,服务器端需要配置或者转码,而且不一定能解决,就是浏览器也能设置接受参数的编码,所以这个问题较真一点说可以说是无解的。
参数最好传递编码,只用英文和数字最好。
------解决方案--------------------
引用:
Quote: 引用:

postSend("<%=basePath%>havePowerCreateRole.do?funOptType="+encodeURI("<%=createRole%>"));
加上encodeURI编码,后台如果还乱码用URL