资源预览内容
第1页 / 共13页
第2页 / 共13页
第3页 / 共13页
第4页 / 共13页
第5页 / 共13页
第6页 / 共13页
第7页 / 共13页
第8页 / 共13页
第9页 / 共13页
第10页 / 共13页
亲,该文档总共13页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
窗体底端用户名:密 码:提交 飞诺网加入收藏飞诺网飞诺网 网页设计网页设计 FrontPage Dreamweaver html Javascript css 网页制作技巧网页制作技巧 网页特效网页特效 色彩原理色彩原理 设计理念设计理念 web 技技术文档术文档 Javascript 系列教程 Javascript 实例 Javascript 技术文档 您当前的位置:飞诺网 网页设计 Javascript Javascript 技术文档jsp 页面提交中文乱码的几种解决方法集锦页面提交中文乱码的几种解决方法集锦www.diybl.com 时间 : 2010-11-16 作者:佚名 编辑:fnw 点击: 1366 评论 JSP 页面提交后中文字符出现乱码-tomcat 下中文乱码问题 JSP 页面提交后中文字符出现乱码-tomcat 下中文乱码问题项目和页面都已设成了 UTF-8 编码形式;解决方法:1) 设定请求的字符编码 request.setCharacterEncoding(“UTF-8“); 2) 指定过滤类 这些天开发一个项目,服务器是 tomcat,操作系统是 xp,采用的是 MVC 架构,模式是采用 Facade 模式,总是出现乱码,自己也解决了好多天,同事也帮忙解决,也参考了网上众多网友的文章和意见,总算是搞定。但是好记性不如烂笔杆,所以特意记下,以防止自己遗忘,同时也给那些遇到同样问题的人提供一个好的参考途径: (一) JSP 页面上是中文,但是看的是后是乱码: 解决的办法就是在 JSP 页面的编码的地方,因为 Jsp 转成 Java 文件时的编码问题,默认的话有的服务器是 ISO-8859-1,如果一个 JSP 中直接输入了中文,Jsp 把它当作 ISO8859-1 来处理是肯定有问题的,这一点,我们可以通过查看 Jasper 所生成的 Java 中间文件来确认 (二) 当用 Request 对象获取客户提交的汉字代码的时候,会出现乱码: 解决的办法是:要配置一个 filter,也就是一个 Servelet 的过滤器,代码如下: 显示代码 打印 01 import java.io.IOException; 02 import javax.servlet.Filter; 03 import javax.servlet.FilterChain; 04 import javax.servlet.FilterConfig; 05 import javax.servlet.ServletException; 06 import javax.servlet.ServletRequest; 07import javax.servlet.ServletResponse; 08 import javax.servlet.UnavailableException; 09 10 /* 11* Example filter that sets the character encoding to be used in parsing the 12* incoming request 13*/ 14 public class SetCharacterEncodingFilter implements Filter 15 16 /* 17 * Take this filter out of service. 18*/ 19 public void destroy() 20 21/* 22* Select and set (if specified) the character encoding to be used to 23 * interpret request parameters for this request. 24*/ 25public void doFilter(ServletRequest request, ServletResponse response, 26FilterChain chain)throws IOException, ServletException 27 28 request.setCharacterEncoding(“GBK“); 29 30/ 传递控制到下一个过滤器 31 chain.doFilter(request, response); 32 33 34public void init(FilterConfig filterConfig) throws ServletException 35 36 配置 web.xml 显示代码 打印 1 2 Set Character Encoding 3 SetCharacterEncodingFilter 4 5 6 Set Character Encoding 7 /* 8如果你的还是出现这种情况的话你就往下看看是不是你出现了第四中情况,你的 Form 提交的数据是不是用 get 提交的,一般来说用 post 提交的话是没有问题的,如果是的话,你就看看第四中解决的办法。 还有就是对含有汉字字符的信息进行处理,处理的代码是: 显示代码 打印 01 package dbJavaBean; 02 03 public class CodingConvert 04 05 public CodingConvert() 06 07 / 08 09 public String toGb(String uniStr) 10String gbStr = “; 11 if(uniStr = null) 12uniStr = “; 13 14 try 15 byte tempByte = uniStr.getBytes(“ISO8859_1“); 16gbStr = new String(tempByte,“GB2312“); 17 18 catch(Exception ex) 19 20 return gbStr; 21 22 23 public String toUni(String gbStr) 24String uniStr = “; 25 if(gbStr = null) 26gbStr = “; 27 28 try 29 byte tempByte = gbStr.getBytes(“GB2312“); 30 uniStr = new String(tempByte,“ISO8859_1“); 31 catch(Exception ex) 32 33 return uniStr; 34 35 你也可以在直接的转换,首先你将获取的字符串用 ISO-8859-1 进行编码,然后将这个编码存放到一个字节数组中,然后将这个数组转化成字符串对象就可以了,例如: 显示代码 打印 1 String str=request.getParameter(“girl”); 2Byte B=str.getBytes(“ISO-8859-1”); 3 Str=new String(B);通过上述转换的话,提交的任何信息都能正确的显示。 (三) 在 Formget 请求在服务端用 request. getParameter(“name”)时返回的是乱码;按 tomcat 的做法设置 Filter 也没有用或者用 request.setCharacterEncoding(“GBK“);也不管用问题是出在处理参数传递的方法上:如果在 servlet 中用doGet(HttpServletRequest request, HttpServletResponse response)方法进行处理的话前面即使是写了: 显示代码 打印 1request.setCharacterEncoding(“GBK“); 2 response.setContentType(“text/html;charset=GBK“);也是不起作用的,返回的中文还是乱码!如果把这个函数改成doPost(HttpServletRequest request, HttpServletResponse response)一切就 OK 了。 同样,在用两个 JSP 页面处理表单输入之所以能显示中文是因为用的是 post 方法传递的,改成 get方法依旧不行。 由此可见在 servlet 中用 doGet()方法或是在 JSP 中用 get 方法进行处理要注意。这毕竟涉及到要通过浏览器传递参数信息,很有可能引起常用字符集的冲突或是不匹配。 解决的办法是: 1) 打开 tomcat 的 server.xml 文件,找到区块,加入如下一行: URIEncoding=”GBK” 完整的应如下: 显示代码 打印 12)重启 tomcat,一切 OK。 需要加入的原因大家可以去研究 $TOMCAT_HOME/webapps/tomcat-docs/config/http.html 下的这个文件就可以知道原因了。需要注意的是:这个地方如果你要是用 UTF-8 的时候在传递的过程中在Tomcat 中也是要出现乱码的情况,如果不行的话就换别的字符集。 (四) JSP 页面上有中文,按钮上面也有中文,但是通过服务器查看页面的时候出现乱码: 解决的办法是:首先在 JSP 文件中不应该直接包含本地化的消息文本,而是应该通过标签从 Resource Bundle 中获得文本。应该把你的中文文本放到Application.properties 文件中,这个文件放在 WEB-INF/classes/* 下,例如我在页面里有姓名,年龄两个 label,我首先就是要建一个 Application.properties,里面的内容应该是 name=”姓名” age=”年龄”,然后我把这个文件放到 WEB-INF/classes/properties/下,接下来根据 Application.properties 文件,对他进行编码转化,创建一个中文资源文件,假定名字是Application_cn.properties。在 JDK 中提供了 native2ascii 命令,他能够实现字符编码的转换。在DOS 环境中找到你放置 Application.properties 的这个文件的目录,在 DOS 环境中执行一下命令,将生成按 GBK 编码的中文资源文件Application_cn.properties:native2ascii ?encoding gbk Application.properties Application_cn.properties 执行以上命令以后将生成如下内容的 Application_cn.properties 文件:name=u59d3u540d age=u5e74u9f84,在 Struts-config.xml 中配置:。到这一步,基本上完成了一大半,接着你就要在 JSP 页面上写,到名字的那个 label 是要写,这样的化在页面上出现的时候就会出现中文的姓名,年龄这个也是一样,按钮上汉字的处理也是同样的。 (五) 写入到数据库是乱码: 解决的方法:要配置一个 filter,也就是一个 Servelet 的过滤器,代码如同第二种时候一样。 如果你是通过 JDBC 直接链接数据
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号