问题描述
一个小系统JSF+JDBC完成(开发环境myeclipse6.5+tomcat5.0)一只能正常使用无乱码。可是这两天把旧的代码拿出来准备改点的东西发现,只要是页面上的值提交到后台bean就变成了乱码。目前状态:1.页面显示正常无乱码,页面文件编码格式GB2312代码如下:%@pagecontentType="text/html;charset=gb2312"%><%@tagliburi="http://java.sun.com/jsf/core"prefix="f"%><%@tagliburi="http://java.sun.com/jsf/html"prefix="h"%><%@tagliburi="http://myfaces.apache.org/tomahawk"prefix="t"%><html><head><metahttp-equiv="Content-Type"content="text/html;charset=gb2312"/><title>供应商人员信息列表</title>2.提交后后台监控得到,输入的中文变为'???è?????'3.由于提交方式为post,根据网上的推荐方法,加了个过滤器,核心代码为:request.setCharacterEncoding("gb2312");单步跟踪发现,在过滤器执行chain.doFilter(request,response);之前request的编码格式为gb2312,但是一到后台beanrequest的编码格式变为iso-88593-1,中文为乱码4.系统历史的备份程序我全部在恢复过,但是所有可以确认完全正确的版本都有这样的问题,而且是系统中所有只要是post提交到后台bean的操作,后台bean中中文全是乱码研究了好多天了,一直解决不了,急!!!望各位高手指点!
解决方案
解决方案二:
写漏了几个:5.在我的myeclipse+tomcat5.5/tomcat6.0环境新建JSF项目,页面数据提交后台bean中文显示正常6.刚找同事的机器试了下,我的程序在他的weblogic上中文在后台bean中午乱码,但是tomacat一样有乱码7.tomcat的server.xml文件中我已加了URIEncoding='GBK',还是不能解决问题
解决方案三:
加上:<%request.setCharacterEncoding("gb2312");%>
解决方案四:
引用2楼mike_24的回复:
加上:<%request.setCharacterEncoding("gb2312");%>
3.由于提交方式为post,根据网上的推荐方法,加了个过滤器,核心代码为:request.setCharacterEncoding("gb2312");我写过滤器也是一样的效果吧,还是没用啊,郁闷啊!
解决方案五:
帮顶!!!!!
解决方案六:
jsp编译成类的时候没指定编码格式哦!!其次java编译成类的时候是按照JVM默认编码执行的,先根据文件编码然后。。。。。那个BEAN,UE另存为gb2312格式文件。其次是过滤器最好遵照WEB程序处理流程。否则一系列传值过滤反倒影响你的程序。导致原因:前期工程没有框架规划。工作环境搭建不利。如果说的不错Eclipse-->文件编码还保留在原始设置状态。
解决方案七:
引用5楼APOLLO_TS的回复:
jsp编译成类的时候没指定编码格式哦!!其次java编译成类的时候是按照JVM默认编码执行的,先根据文件编码然后。。。。。那个BEAN,UE另存为gb2312格式文件。其次是过滤器最好遵照WEB程序处理流程。否则一系列传值过滤反倒影响你的程序。导致原因:前期工程没有框架规划。工作环境搭建不利。如果说的不错Eclipse-->文件编码还保留在原始设置状态。
呵呵,有可能是这个问题,请问我现在该如何处理呢
解决方案八:
文件的格式我检查了下的,是myeclipse中显示的是gb2312现在还是没办法啊,望高手赐教
解决方案九:
LZ这悟性。。。。在回答你一次吧!jsp编译成类的时候指定编码格式!!----<%@pagelanguage="java"contentType="text/html;charset=gb2312"pageEncoding="gb2312"%>web.xml加入过滤器,没有就用自己写的那个,也可以导入这个jar<filter><filter-name>pageEncodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>gb2312</param-value></init-param><init-param><param-name>forceEncoding</param-name><param-value>true</param-value></init-param></filter><filter-mapping><filter-name>pageEncodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>如果还出问题,就UPDATE工程环境,redeployPJ
解决方案十:
中间碰到中文乱码,应该说所有的情况都碰到了吧,解决也是曲折的,经过摸索,总结如下:1、所有页面都用UTF-8。2、写过滤器,设置request.setCharacterEncoding("UTF-8")。3、javascript脚本里用encodeURI(str)。4、适当的时候,在jsp里用java.net.URLDecoder.decode(request.getParameter("str"),"UTF-8")。5、最容易忽略的是使用"":value="<%=paraFiles%>",一定要有引号。例子源码:http://download.csdn.net/source/965319
解决方案十一:
//选择使用的字符编码if(ignore||(request.getCharacterEncoding()==null)){Stringencoding=selectEncoding(request);if(encoding!=null){request.setCharacterEncoding(encoding);request.getParameterMap();}}//Passcontrolontothenextfilterchain.doFilter(request,response);发现在过滤器代码中加上request.getParameterMap();解决了问题。感觉是过滤器执行request.setCharacterEncoding(encoding);在backbean里面获取数据前编码被改变过。而我的程序这个过程中只在faceservlet中执行了的。现在只能认为是程序在不同的tomcat版本中切换照成的乱码(我这个小系统以前是在tomcat5中编译执行,现在时在tomca5.5和tomcat6测试)