一. 服务器端接收到浏览器端传送的数据出现乱码的问题!!!(Servlet端获取数据时出现乱码)
1. 为什么表单提交中文会出现乱码的问题?(非AJAX方式)
浏览器端:当表单提交时,浏览器会对中文参数值进行编码,此时会使用打开表单所在的页面时使用的字符集进行编码(即:使用<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> 指定的字符集进行编码)
服务器端:Servlet默认情况下会使用 ISO-8859-1 进行解码。
所以:浏览器端与服务器端的编码与解码方式不一致,并且 ISO-8859-1 本身并不支持中文的编码与解码,所以导致乱码的产生。
2. 如何解决Servlet端的乱码问题?(建议使用方案二+方案三的结合体解决乱码的问题)
第一种方案:将乱码后的字符串,按照 ISO-8859-1的方式还原成byte, 然后再将还原后的byte按照 UTF-8 的方式编码为字符串
示例如下:byte[ ] bs=str.getBytes("ISO8859-1");
str=new String(bs,"UTF-8");
优点:get 和 post请求方式都适用
缺点:比较麻烦
第二种方案:修改tomcat的配置文件server.xml,在server.xml 的 Connector标签中添加uriEncoding属性,并且设置uriEncoding="utf-8"
示例如下: <Connector connectionTimeout="20000" port="8085" protocol="HTTP/1.1" redirectPort="8443" uriEncoding="utf-8"/>
优点:简单
缺点:只对get请求方式有效,对post请求方式无效
第三种方案:在获取请求参数前设置解码方式为UTF-8
示例如下:request.setCharacterEncoding("UTF-8");
优点:简单
缺点:只对post请求方式有效,对get请求方式无效
二. 浏览器端接收到服务器端传送的数据出现乱码的问题!!!(浏览器端获取数据时出现乱码)
1. 为什么Servlet返回给浏览器的数据会出现乱码?
Servlet默认情况下返回的JSP页面的编码方式为 ISO-8859-1 方式,浏览器端接收到的数据与服务器端一致也为 ISO-8859-1 方式,此时虽然服务器端的编码方式与浏览器端的解码方式一致,但是由于 ISO-8859-1 方式本身并不支持中文的编码与解码,所以导致了中文产生了乱码。
2. 如何解决Servlet返回给浏览器的数据出现乱码的问题?
在输出JSP页面之前添加页面编码方式为 UTF-8, 以此来通知servlet在输出JSP页面之前使用指定的字符集UTF-8进行编码(而不再使用默认的编码方式:ISO-8859-1),而且还会通知浏览器服务器端返回的数据类型和字符集,浏览器端会利用服务器端返回的字符集对数据进行相应的解码。
示例:response.setContentType("text/html;charset=utf-8");