直接用一个模板做的网站,可悲的是这模板质量太差,大部分时间都花在调整乱码问题上的,笔者感觉jsp中的乱码也就这点了。在汇总了网上大部分靠谱的解决方法之后,整理如下。
1.html页面的编码规范
用户能看到的都是html页面,因此,无论首先应该做到的是静态页面编码的规范。
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
对于JSP页面首行加上
<%@ page contentType="text/html; charset=UTF-8" language="java" import="java.sql.*" errorPage="" %>
2.servlet编码的规范
servlet作为中间的控制者,承担了对用户请求的一部分处理以及与后台数据库的交互功能,因此MVC模式中servlet作为一个枢纽一方面得解决用户请求信息的编码规范以及与数据库交互的编码规范。
response.setContentType("text/html;charset=UTF-8");
在此默认为response.setContentType("text/html");若不加charset=UTF-8有可能造成在使用request.getRequestDispatcher重定向时造成乱码;
PrintWriter out = response.getWriter();
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
后两者没什么好说的,对接收的编码进行规范,前者如果删除有可能造成重定向乱码
因此前四行代码一般直接这样使用
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
doPost(request, response);
————————————————————————————————————————————
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
3.数据库连接时的编码规范
DriverManager.getConnection("jdbc:mysql://localhost/*******?useUnicode=true&characterEncoding=utf8", " ", " ");
设定连接数据库交互的编码规范
如果这里在数据库中还存在乱码,请检查一下数据库对应的字符集,用数据库管理软件可以轻易编辑,这里不赘述
4.设置tomcat默认字符集
可以考虑这样做,在有时忘记对编码进行规范的时候,tomcat采用默认字符集,打卡tomcat所在文件夹的 /conf/server.xml
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8" />
如果大家还存在乱码的问题可以联系我