Servlet相关的几种中文乱码问题
-
浏览器调用jsp,html等页面中文显示乱码
-
使得文件本身以utf-8字符集编辑保存
-
让浏览器浏览器以utf-8字符集解析
-
在浏览器中右键选择编码格式为utf-8;
-
通过<meta>标签模拟response头,起到告诉浏览器用utf-8的编码解析
-
具体操作:
//html <meta name="content-type" content="text/html; charset=UTF-8">或<meta charset="utf-8"> //jsp <%@ pageEncoding="utf-8"%> //xml <?xml encoding="UTF-8"?>
-
-
-
通过浏览器调用servlet,页面显示乱码。
-
response乱码问题
-
控制浏览器用UTF-8进行解码
response.setContentType("text/html;charset=UTF-8"); //或者 response.setHeader("content-type","text/html;charset=utf-8"); //ps:setHeader是HttpServletResponse的方法。如果想在拦截器Filter中设置字符编码,则无此方法,因为Filter的doFilter方法的参数类型是ServletResponse
-
将response对象中的数据以UTF-8解码后的字节流发向浏览器
response.setCharacterEncoding("UTF-8");
-
-
request乱码问题
-
post请求乱码
resquest.setCharacterEncoding("页面使用的字符集"); //只对post请求有效
-
GET请求(URL方式传递参数乱码)
-
原因:
//问题本质是get方式传递的参数内容默认编码方式问ISO8859-1,而且使用request.setCharacterEncoding("utf-8")也无法解决问题。
-
解决方法一:
修改tomcat服务器的配置文件,即修改tomcat目录下的conf/server.xml文件。
<Connector port="8080" protocol="HTTP/1.1" maxThreads="150" connectionTimeout="200000" redirecPort="8443" <!-URIEncoding="utf-8"-> /> //注释为需要添加的部分
-
解决方法二:
在servlet中手动转换字符集并转换(不建议使用)。
//对应Servlet中: String name = request.getParameter("name"); String value = null; value = new String(name.getBytes("ISO-8859-1"),"页面使用的字符集");
-
-
-
-
调用数据库出现乱码
-
修改数据库字符集或表字符集
-
#sql语句 show create table 表名; #查询表的信息(主要看字符集) /*例:Table Create Table Dog CREATE TABLE `dog` ( `dog_id` int(11) NOT NULL AUTO_INCREMENT, ...... PRIMARY KEY (`dog_id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8*/ #修改完数据库字符集,需要重启mysql数据库 ALTER DATABASE 数据库名 CHARACTER SET utf8; #修改表字符集 ALTER TABLE 表名 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;