问题描述
前台jsp表单提交中文参数过去,在action中调试时总是接收到乱码表单使用的是post提交方式jsp页面设置<%@pagelanguage="java"contentType="text/html;charset=utf-8"pageEncoding="utf-8"%>struts.xml也设置了<constantname="struts.i18n.encoding"value="UTF-8"/>自己还写了一个拦截器publicclassCharEncodinInterceptorextendsAbstractInterceptor{@OverridepublicStringintercept(ActionInvocationinvocation)throwsException{HttpServletRequestrequest=ServletActionContext.getRequest();request.setCharacterEncoding("UTF-8");returninvocation.invoke();}}并且已经成功引用该拦截器此外tomcat页设置了URIEncoding="UTF-8"但是action中接收中文时还是乱码
解决方案
解决方案二:
将拦截器去掉,试试看
解决方案三:
<constantname="struts.i18n.encoding"value="GBK"/>
解决方案四:
你是从哪里取数据?数据库吗,那你要看看你数据库里面的资料是否本身就是乱码,
解决方案五:
换个继承的类在源文件修改的那个是get的方式提交可以改变,用下面的这个是拦截post的提交方式,这是经常用到的,包你解决问题publicclassMyFilterextendsRequestProcessor{@OverrideprotectedbooleanprocessPreprocess(HttpServletRequestrequest,HttpServletResponseresponse){try{request.setCharacterEncoding("utf-8");}catch(UnsupportedEncodingExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}returntrue;}}
解决方案六:
还有关键的一句,在struts-xml文件里面配置<controllerprocessorClass="com.strutsdatasource.filter.MyFilter"></controller>这样你的问题就可以解决
解决方案七:
struts2.1.6这个版本就没试过了,是释放版吗?
解决方案八:
<constantname="struts.i18n.encoding"value="GBK"/>
解决方案九:
<constantname="struts.i18n.encoding"value="GBK"/>
解决方案十:
在web.xml中加一个过滤器就可以了<filter><filter-name>encodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>GBK</param-value></init-param><init-param><param-name>forceEncoding</param-name><param-value>true</param-value></init-param></filter><filter-mapping><filter-name>encodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><filter><filter-name>struts-cleanup</filter-name><filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp</filter-class></filter><filter-mapping><filter-name>struts-cleanup</filter-name><url-pattern>/*</url-pattern></filter-mapping>
解决方案十一:
这是struts2.1.6的bug,你可以在web.xml中将filter配置换成struts2.0的试一下.
解决方案十二:
struts-xml文件里面配置<constantname="struts.i18n.encoding"value="GBK"/>
解决方案十三:
struts2.1.6版本中存在一个Bug,即接收到的中文请求参数为乱码(以post方式提交),原因是struts2.1.6在获取并使用了请求参数后才调用HttpServletRequest的setCharacterEncoding()方法进行编码设置,导致应用使用的就是乱码请求参数。这个bug在struts2.1.8中已经被解决,如果你使用的是struts2.1.6,要解决这个问题,你可以这样做:新建一个Filter,把这个Filter放置在Struts2的Filter之前,然后在doFilter()方法里添加以下代码publicvoiddoFilter(...){HttpServletRequestreq=(HttpServletRequest)request;req.setCharacterEncoding("UTF-8");//应根据你使用的编码替换UTF-8filterchain.doFilter(request,response);}
解决方案十四:
解决方案十五:
上面一个老兄说的process就可以啦,这个是在提交给action之前,actionfrom做的一个转码动作一定行,我试过