PrintWriter out = response.getWriter();乱码解决

         resopnse  request的乱码问题

今天在改项目时,发现这个简单又容易忽视在问题。说起这个问题,比较简单,但也比较容易忽视。下面就具体讲讲这个问什么会出现乱码问题。

request乱码指的是:浏览器向服务器发送的请求参数中包含中文字符,服务器获取到的请求参数的值是乱码;

response乱码指的是:服务器向浏览器发送的数据包含中文字符,浏览器中显示的是乱码;

乱码产生的原因:不管是request乱码还是response乱码,其实都是由于客户端(浏览器)跟服务器端采用的编码格式不一致造成的。以request乱码为例:浏览器向服务器发送请求,因为浏览器与服务器之间的通信实质上是socket流,所以要先将请求参数(字符)转换成字节,换成二进制的格式,服务器接收到请求参数后进行解码(字节转字符),然后封装到request对象中。如果客户端的编码与服务器端的解码不统一,就会导致通过request获取到的请求参数的值是乱码。   总之一句话,就是,客户端和服务器编码不一致所造成的,。

解决:
一、response乱码

服务器发给浏览器的数据默认是按照ISO-8859-1编码,浏览器接收到数据后按照默认的字符集进行解码后显示,如果浏览器的默认解码字符集不是ISO-8859-1,就出现乱码。
1.设置服务器端的编码
response.setCharacterEncoding("utf-8”);
默认是ISO-8859-1;该方法必须在response.getWriter()之前进行设置
2.
response.setContentType("text/html;charset=utf-8”);
等同于response.setHeader("contentType", "text/html;charset=utf-8”);它其实会覆盖response.setCharacterEncoding("utf-8”)
一、request乱码
从浏览器发起的访问方式有三种:在地址栏直接输入URL访问、点击页面中的超链接访问、提交表单访问,

所以对于request乱码,只需要在服务器端设置相应的解码格式即可

post

1.表单提交request.setCharacterEncoding("utf-8”)

2.get

在在tomcat的server.xml中,设置元素的属性URIEncoding="UTF-8”,注意:1、设置元素的属性useBodyEncodingForURI=“true”,意思是请求体和uri使用相同的编码格式。通过设置这两个属性,既可以解决get方式的乱码,又可以解决

post方式的乱码。
另外注意在所有页面都采用同一编码,例如(都是gbk或者都是utf-8)这样,避免出现页面乱码问题。

你可能感兴趣的:(javaweb,java学习课程,java学习笔记之经典案例)