锁定老帖子 主题:JSP中文问题汇总
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2006-11-29
以下总结这段时间以来遇到的中文问题汇集: 注:以下“后台”字眼,相当于在servlet内,或者某一个类内,或者struts的action内。 1.一字符串在后台用system.out.println输出正常,保存在session里到JSP页面显示乱码 最初的乱码问题. 原因:似乎是默认的JSP页面采用8859-1编码,显示不了中文。 解决:在JSP页面上方加个<%@ page contentType="text/html;charset=utf-8"%>解决。当然,也可以用charaset="gbk","gb2312"之类的编码,不过建议还是用utf-8,详细原因去看看jdon板桥里人的那篇《中文乱码终极解决方法》。
2.提交表单,在后台读取表单内容发现乱码 原因:request的默认编码问题,具体不甚清楚,没看过tomcat源代码。。。 解决:写个fileter,具体如下: package operator; import java.io.IOException; import javax.servlet.Filter; public class SetCharacterEncodingFilter implements Filter { protected FilterConfig filterConfig = null; public void init(FilterConfig filterConfig) throws ServletException { public void doFilter(ServletRequest request, ServletResponse response, public void destroy() { protected String selectEncoding(ServletRequest request) { web.xml配置: 在servlet-mapping后加入以下内容: <filter> <filter-mapping> 3.下载时,“另保存为”默认名字显示乱码 原因:不清楚。。。 在tomcat安装目录的config/sever.xml内的 <Connector 加进最后的“URIEncoding="UTF8" 4.在后台用system.out.println()输出正常,保存到mysql数据库EMS显示乱码,读回数据也是乱码 原因:mysql默认采用的是latin1编码; 解决:创建表的时候要修改成utf-8。如果已存在表,用EMS的话,直接修改table-property里面的default charater set就可以了,其他管理工具不知道,没用过。 5.在后台用system.out.println()输出正常,保存到mysql数据库EMS显示乱码,读回数据时——居然正常了,直接往数据库里插入正常的中文,读出——居然乱码了; 原因:EMS管理工具的默认显示问题 解决:register数据库时,client default charater set改utf-8 注:这该死的问题困扰了我好长一段时间,一直以为我程序有问题,检查了N久,发现居然是工具显示问题。。 6.COMMON-UPLOAD 上传中文名文件时,显示乱码 原因:common-upload组件默认采用系统的编码,而页面传过来的请求采用UTF-8编码。 我的系统是简体中文WINDOWS 2K3,系统编码是GBK,当页面请求过来时,UPLOAD就把UTF8编码的流直接按GBK编码了。。。如果用new String(oldStr.getBytes("gbk"),"utf8)可以发现,部分中文可以还原回去。 解决:网上的说法五花八门,甚至有归罪于这是UPLOAD的BUG,其实只要在 DiskFileUpload fu = new DiskFileUpload(); 后加一句: fu.setHeaderEncoding("utf8"); 就解决了。。。 看来有时候还是直接读英文帮助手册来得正确。。。
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
浏览 3235 次