Http协议中极为重要的两个协议是请求协议和响应。后端服务器从前端接收回请求后再链接数据库服务器老是会出现乱码的问题。如今就这个乱码问题进行一个详细的总结。html
一、数据展现中的乱码问题前端
--- 若是是html页面,那么须要使用meta标签的属性charset指挥浏览器以什么字符集进行显示。例如:国内的浏览器若是不进行设置大都默认为简体中文进行页面展现,若是服务器端工做区的java
字符集格式是utf-8,那么这时候就会出现中文乱码问题,因此须要加上一段代码:mysql
<meta charset="utf-8">
---若是是从服务器端向浏览器端打印输出,例如java中servlet中向浏览器端使用response.getWriter().print这种语句,或者是jsp中的el表达式都须要加上这样一段代码设置响应的格式sql
servlet中 response.setContentType("UTF-8"); 或jsp中 <%@page contentType="text/html;charset=UTF-8"%> 设置响应的类型和字符集 <%@page pageEncoding="UTF-8"%> 单独设置响应的字符集
二、数据保存中的乱码问题数据库
在这里须要进行一个判断,是将数据保存到数据库以前出现的乱码,仍是保存后出现的乱码。后端
---若是是保存以前出现的乱码,须要在保存以前解决乱码问题。这里须要在保存到服务器以前就将乱码解决掉,问题不在于数据库。浏览器
---若是确认保存以前是正常的,可是一保存到数据库中就出现乱码,那么就有多是数据库不支持这种字符集,例如:若是数据库不支持utf-8,则须要进行一下设置tomcat
怎么设置mysql的字符集呢?
* 全局设置
修改mysql.ini配置文件中全部的字符集,修改以后重启mysql服务。
* 局部设置
CREATE TABLE `emp` (
`EMPNO` int(4) NOT NULL,
`ENAME` varchar(10) DEFAULT NULL,
`JOB` varchar(9) DEFAULT NULL,
`MGR` int(4) DEFAULT NULL,
`HIREDATE` date DEFAULT NULL,
`SAL` double(7,2) DEFAULT NULL,
`COMM` double(7,2) DEFAULT NULL,
`DEPTNO` int(2) DEFAULT NULL,
PRIMARY KEY (`EMPNO`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
三、数据传输中的乱码问题服务器
---什么是数据传输中的乱码问题?
form表单提交以后,从服务器端接收数据时出现了乱码。
---产生这种现象的根本缘由是?
由于浏览器传输数据统一采用的是国标iso8859-1,浏览器将页面展现中的utf-8格式的数据转换为iso8859-1,服务器接收到iso8859-1的数据后殊不知道这些数据原来是什么字符集什么格式的。
因此这里就须要将浏览器端传送来的数据进行一个转型。
---怎么作?
i 万能方法:
能够解决get以及post,任何一种传递中的乱码采用此方式均可以解决。 byte[] bytes = username.getBytes("ISO-8859-1"); //从新编码 (网线当中传送的是ISO-8859-1) username = new String(bytes,"UTF-8"); //从新解码 (ISO-8859-1以前是UTF-8的方式) 换句话说:浏览器的字符集是GBK的时候,第二行代码修改成GBK就好了。 注意:tomcat7以及7版本以前以上方式均可以解决post和get乱码。
ii 请求行中的乱码
get请求发送的请求内容是在请求行中,9.0版本以上的tomcat服务器server.xml配置文件中Connector标签当中的Encoding属性默认为utf-8,可是9.0如下版本Encoding属性默认为iso-8859-1,这 里须要特别注意:若是使用的是9.0如下版本则须要将Encoding属性进行修改成要使用的字符集才不会出现乱码
iii 请求体中乱码
post请求发送的额请求内容是在请求体中,请求体中的乱码须要在servlet进行设置接受的字符集,使用如下代码:
request.setCharacterEncoding("UTF-8");
张先生 邮箱:zg_199101@163.com