在做项目的过程中,遇到了中文乱码问题,该如何处理?(比如网站主页查询页面显示乱码)
可以从页面,程序,以及数据库三个方面去查看问题的原因所在,主页面显示中文乱码,无外乎是因为从数据库中取出来的数据传输到主页面的过程中出现了编码问题,那么就应该从这三个方面去查找问题的所在。因为我们常用UTF-8的编码格式,所以我们就检查所有数据的编码是否都是UTF-8编码。
1. 查看一下页面jsp文件的编码格式(1.3.1/1.3.2)
1.1、项目文本文件默认编码:
【右击项目】->【Properties】->【Resource】->【Text file encoding】
1.2、文件默认编码:默认使用项目的默认编码
【右击文件】->【Properties】->【Resource】->【Text file encoding】
1.3、JSP文件编码:由于JSP要翻译为Servlet
1.3.1、JSP文件编码:
【右击文件】->【Properties】->【Resource】->【Text file encoding】
1.3.2、JSP翻译为Servlet时的编码: (此项可以由1.1,1.2,1.3.1代替)
<%@ page language="java" pageEncoding="utf-8"%>
1.3.3、从服务器将jsp内容输出到浏览器
<%@page contentType="text/html;charset=utf-8"%>
在这次输出过程中,由contentType属性中的charset来指定,将servlet编译后的的二进制码以charset的编码形式来输出。
2. 服务器端编码设置
服务器端编码,将客户端传过来的数据进行解码:
浏览器默认使用ISO-8859-1进行编码数据,然后将数据传输到服务器,因此我们默认只需要将浏览器发送过来的数据转换为我们需要的编码即可。
GET请求方式:
2.1 TOMCAT默认ISO-8859-1 因此可以设置默认编码为UTF-8解决,在conf\server.xml文件中设置如下
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding=”UTF-8”/>
2.2
String username = request.getParameter(“username”);
username = new String(username.getBytes("ISO-8859-1“), "UTF-8");
POST请求方式:
2.3 // 必须在获取参数之前,调用如下方法先解码
request.setCharacterEncoding(“UTF-8”);
String username = request.getParameter(“username”);
response.setContentType("text/html;charset=utf-8");
3.数据库的编码设置
3.1 JDBC连接数据库的编码设置
"jdbc:mysql://localhost:3306/jd1203db?useUnicode=true&characterEncoding=utf8","root","1234");
3.2 在建表或者建数据库时可以加上:
create database jsd1203db ENGINE=InnoDB DEFAULT CHARSET=utf8;
3.3查看MySql数据中当前联接系统参数 show variables like 'char%',显示各个编码类型。
可以show create database dangdang;通过该语句查看建库的语句,看是否有设置编码。
如果各种编码都是对的,可是在数据库中查看数据时是乱码,可以用set names ‘gbk’,设置查看编码为gbk,与系统一致(windows)。 注意,这个设置只对当前会话有效。