目前考虑到的有三个地方需要设置字符编码:
JSP页面:<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
JDBC获取连接时:DriverManager.getConnection("jdbc:mysql://localhost:3306/developerdb?useUnicode=true&characterEncoding=utf8", "developer", "developer");
数据库:
但最终插入数据库时还是乱码了(正常显示的数据是通过workbench插入的,乱码的是jdbc插入的):
两个问题:
问题应该是出在Tomcat身上。浏览器请求传到Tomcat容器的时候还会经历一次编码转换,而Tomcat7.0对请求的默认编码字符集是ISO8859-1(还没找到Tomcat的官方文档来支持这一观点),所以解决方法就是在java代码里对请求再次进行编码转换。其中有两种处理方式:
1.
对参数值的字符串进行编码转换。
new String(request.getParameter("name").getByte("ISO-8859-1"),"UTF-8");
2.
对进入容器的所有请求进行编码转换。这个方式需要配置一个过滤器
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding("utf-8");
chain.doFilter(request, response);
}
问题应该是出在Tomcat身上。浏览器请求传到Tomcat容器的时候还会经历一次编码转换,而Tomcat7.0对请求的默认编码字符集是ISO8859-1(还没找到Tomcat的官方文档来支持这一观点),所以解决方法就是在java代码里对请求再次进行编码转换。其中有两种处理方式:
1.
对参数值的字符串进行编码转换。
new String(request.getParameter("name").getByte("ISO-8859-1"),"UTF-8");
2.
对进入容器的所有请求进行编码转换。这个方式需要配置一个过滤器
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding("utf-8");
chain.doFilter(request, response);
}
问题应该是出在Tomcat身上。浏览器请求传到Tomcat容器的时候还会经历一次编码转换,而Tomcat7.0对请求的默认编码字符集是ISO8859-1(还没找到Tomcat的官方文档来支持这一观点),所以解决方法就是在java代码里对请求再次进行编码转换。其中有两种处理方式:
1.
对参数值的字符串进行编码转换。new String(request.getParameter("name").getByte("ISO-8859-1"),"UTF-8");
2.
对进入容器的所有请求进行编码转换。这个方式需要配置一个过滤器
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding("utf-8");
chain.doFilter(request, response);
}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。