1.以post方法提交的表单数据中有中文字符时
tomcat对请求数据默认采用ISO-8859-1字符集进行解码,request对象的getParameter()方法得到的字符串是以ISO-8859-1转换而来的,所以在获取请求参数值之前,调用setCharacterEncoding("UTF-8")方法,将请求的解码方式设定为UTF-8.注意:页面和浏览器发送请求也应一致使用UTF-8,通过jsp页面设置page指令的contentType属性,指定页面内容的编码格式如下
<%@ page contentType="text/html; charset=utf-8" %>
contentType和pageEncoding的区别:contentType定义响应的资源类型,也可以包含jsp页面和响应内容的字符集;pageEncoding指定jsp文件的字符集及默认的contentType字符集.
2.以get方法提交的表单数据中有中文字符时
采用get方法提交表单时,提交的数据作为查询字符串被附加到URL的末端发送到服务器,对于这部分数据,在服务器调用setCharacterEncoding()方法是不起作用的,我们需要在得到请求参数值后进行编码转换.
<% String userName = request.getParameter("userName"); userName = new String(name.getBytes("ISO-8859-1"),"UTF-8"); %>
3.在Tomcat中设置字符集
当表单提交get方法时,虽然可以通过构造一个新的String方式解决中文乱码问题,但是当获取多个参数值时,每个参数都进行重新编码,操作比较繁琐.所以可以通过在Tomcat中设置字符集的方式解决.
方法:找到Tomcat安装路径下的子目录conf\server.xml文件,在<Connector>元素中添加URIEncoding属性,将值设置为"UTF-8"