博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java/Java Web中乱码解决汇总
阅读量:5319 次
发布时间:2019-06-14

本文共 3405 字,大约阅读时间需要 11 分钟。

在开发Java/Java Web Application过程中,往往会出现乱码问题,而且有的时候真会弄得人很烦,浪费太多的时间。

记得之前看过一篇帖子,详细解释了Encoding/Decoding过程,不过时间久远已经淡忘。。。

其实针对这种乱码问题,记录问题+查阅解决方案是比较好的解决办法。

问题1:JSP页面中的EL表达式输出出现乱码,如

由book.jsp页面通过href转向modifyBook.jsp页面

book.jsp

${book.bookId} ${book.bookName} ${book.author} ${book.price} ${book.publisher}
删除
修改

modifyBook.jsp

EL表达式${param.publisher}的输出乱码。

解决方案:

1. 首先检查各个JSP页面的编码方式,确认均为contentType="text/html;charset=UTF-8";

2. 检查跳转后的url地址如下:http://localhost:8080/basicmvc/modifyBook?bookid=00003&bookname=Java%20EE&author=wang&price=30.0&publisher=人民邮电,不是乱码。

3. 由2说明${param.publisher}的源没有问题,就是输出编码的问题。折腾半天,想起tomcat的编码配置URIEncoding="UTF-8"。解决!

问题2接上一个问题,中文数据展示没有问题了。但紧接着更新数据库后,数据库中出现中文乱码??。

既然数据源没有问题,那就是数据库这边的问题了,但是数据库创建和表的创建都是UTF-8的方式。再查看Java代码,应该是PreparedStatement使用setString出现中文乱码。查询后,得知数据库连接中需要设置编码方式,恍然大悟(之前解决过类似问题,只是给忘了。。。),如下:

jdbc:mysql://localhost:3306/crud?useUnicode=true&characterEncoding=UTF-8

问题3:在另一环境中,解决了问题1和问题2,但还是出现了乱码问题。

唯一区别就是Filter类的使用, Filter类似于Servlet,在web.xml中配置。

解决方案:(代码胜千言)

EncodingFilter:

public class EncodingFilter implements Filter {    //配置中默认的字符编码    protected String encoding = null;    protected FilterConfig filterConfig;    //当没有指定默认编码时是否允许跳过过滤    protected boolean ignore = true;    @Override    public void init(FilterConfig filterConfig) throws ServletException {        this.filterConfig = filterConfig;        this.encoding = filterConfig.getInitParameter("encoding");        System.out.println(this.encoding);        String value = filterConfig.getInitParameter("ignore");        if (value == null){            this.ignore = true;        } else if (value.equalsIgnoreCase("true")) {            this.ignore = true;        } else if (value.equalsIgnoreCase("yes")) {            this.ignore = true;        } else {            this.ignore = false;        }    }    @Override    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {        HttpServletRequest httpServletRequest = (HttpServletRequest)request;        HttpServletResponse httpServletResponse=(HttpServletResponse)response;        //Conditionally select and set the character encoding to be used        if(ignore || httpServletRequest.getCharacterEncoding() == null){            String coding = selectEncoding(httpServletRequest);            if(coding != null){                httpServletRequest.setCharacterEncoding(coding);                httpServletResponse.setCharacterEncoding(coding);            }        }        //将控制器传向下一个filter        chain.doFilter(httpServletRequest, httpServletResponse);    }    @Override    public void destroy() {        this.encoding = null;        this.filterConfig = null;    }    protected String selectEncoding(ServletRequest request) {        return (this.encoding);    }}

web.xml

EncodingFilter
com.chris.web.filter.EncodingFilter
encoding
UTF-8
EncodingFilter
/*

 问题3:待续

转载于:https://www.cnblogs.com/hello-yz/p/5497326.html

你可能感兴趣的文章
bzoj2257
查看>>
http://www.bootcss.com/
查看>>
20145308 《网络对抗》 注入shellcode+Return-to-libc攻击 学习总结
查看>>
如何使用USBWebserver在本机快速建立网站测试环境
查看>>
变量提升
查看>>
jquery-jqzoom 插件 用例
查看>>
查看oracle数据库的连接数以及用户
查看>>
三.野指针和free
查看>>
简单【用户输入验证】
查看>>
python tkinter GUI绘制,以及点击更新显示图片
查看>>
Spring面试题
查看>>
C语言栈的实现
查看>>
SRM 628 DIV2
查看>>
2018-2019-2 20165314『网络对抗技术』Exp5:MSF基础应用
查看>>
SecureCRT的使用方法和技巧(详细使用教程)
查看>>
自建数据源(RSO2)、及数据源增强
查看>>
2018icpc徐州OnlineA Hard to prepare
查看>>
使用命令创建数据库和表
查看>>
linux下Rtree的安装
查看>>
PHP魔术方法之__call与__callStatic方法
查看>>