本文共 1798 字,大约阅读时间需要 5 分钟。
解决servlet中的乱码问题
Http协议中极为重要的两个协议是请求协议和响应。后端服务器从前端接收回请求后再连接数据库服务器总是会出现乱码的问题。现在就这个乱码问题进行一个详细的总结。
1、数据展示中的乱码问题
--- 如果是html页面,那么需要使用meta标签的属性charset指挥浏览器以什么字符集进行显示。例如:国内的浏览器如果不进行设置大都默认为简体中文进行页面展示,如果服务器端工作区的
字符集格式是utf-8,那么这时候就会出现中文乱码问题,所以需要加上一段代码:
---如果是从服务器端向浏览器端打印输出,例如java中servlet中向浏览器端使用response.getWriter().print这种语句,或者是jsp中的el表达式都需要加上这样一段代码设置响应的格式
servlet中
response.setContentType("UTF-8");
或jsp中
设置响应的类型和字符集
单独设置响应的字符集
2、数据保存中的乱码问题
在这里需要进行一个判断,是将数据保存到数据库之前出现的乱码,还是保存后出现的乱码。
---如果是保存之前出现的乱码,需要在保存之前解决乱码问题。这里需要在保存到服务器之前就将乱码解决掉,问题不在于数据库。
---如果确认保存之前是正常的,但是一保存到数据库中就出现乱码,那么就有可能是数据库不支持这种字符集,例如:如果数据库不支持utf-8,则需要进行一下设置
怎么设置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
3、数据传输中的乱码问题
---什么是数据传输中的乱码问题?
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
转载地址:http://otowx.baihongyu.com/