post、get请求乱码问题
乱码可能出现在哪里
- 数据“传递”过程中的乱码
- 数据“展示”过程中的乱码
- 数据“保存”过程中的乱码
数据“展示”过程中的乱码
-
在response获取标准输出流之后,使用标准输出流输出到浏览器上中文的时候,出现的乱码。
-
解决方案
response.setContentType("text/html;charset=UTF-8");
数据“保存”过程中的乱码
-
数据最终保存到数据库的时候,表中存储的数据出现乱码问题
-
数据库表中存储的数据出现乱码,为什么?
- 可能是在保存之前就已经出现乱码,保存到数据库表中的数据一定是乱码
- 保存之前数据没有出现乱码,但是数据库本身不支持简体中文,也可能出现乱码
-
解决方案
- 若保存之前就是乱码,和数据库没有关系,先解决保存之前的乱码问题
- 让数据库本身支持简体中文
数据“传递”过程中的乱码
-
浏览器提交数据给服务器,在传送的过程中出现中文乱码问题
-
为什么在传递过程中会出现乱码呢?
- 浏览器在提交表单数据的时候,不管这个语言是哪个国家的语言,不管这个文字是哪个国家的文字,都是采用ISO-8859-1的这种编码方式提交数据的。
- 也就是说,在网络中传送的数据包中涉及到文字的话,该文字一定是ISO-8859-1的编码方式
- 发送给Tomcat服务器之后,Tomcat服务器接收到数据,只是接收到一堆ISO-8859-1编码方式的数据,不知道该数据以前是哪个国家的文字
- 浏览器是这样提交数据的:username=%E5%BC%A0%E4%B8%89
- %E5%BC%A0%E4%B8%89是ISO-8859-1的编码方式编码之后的数据,以前是什么,不知道
-
解决方案
1)第一种方案:万能方案,适合于所有的请求,包括GET请求和POST请求
- 将从request对象中获取到的数据,经过ISO-8859-1的编码方式进行解码还原,回归最原始的二进制码
- 再找一种编码方式,这种编码方式和浏览器页面的编码方式相同,进行重新编码
2)第二种方案:只能解决POST请求中的乱码问题
request.setCharacterEncoding("UTF-8");- 以上代码在从request对象中获取任何数据之前设置有效果
- 以上的代码只对请求体中的数据进行编码,无法对请求行上的数据进行编码,所以只能解决POST,不能解决GET
3)第三种方案:只能解决GET请求中的乱码问题
- 修改CATALINA_HOME/conf/server.xml文件
<Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8"/>- server.xml文件中的Connector标签中的属性
- port 设置端口号
- URIEncoding 设置URI的编码方式
- maxThreads 设置Tomcat服务器可支持的最大线程数量
- ......
结论
- 为了避免乱码的出现,建议整个工程中凡是涉及到编码方式的,最好所有的编码方式统一。
- 数据库的编码方式、HTML页面的编码方式、java程序中使用的编码方式、myeclipse工作区的编码方式....都采用UTF-8

浙公网安备 33010602011771号