您的位置:首页 > 产品设计 > UI/UE

request、response 中文乱码问题与解决方式

2017-03-15 10:02 381 查看
现象:服务器端或者浏览器端出现乱码

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

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

原因:

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

解决方案:

一:request乱码解决:

通过get提交表单信息的方式有两种:

1:通过form表单的 method 设置 get的方法提交get请求(即method=”get”)

2.通过超链接提交:将参数携带在请求路径的后面

1、通过get方法请求参数提交到 Servlet程序中,首先是得到表单的信息,还得手动去设置编码方式
即value1=new String(value.getBytes("iso-8859-1"), "UTF-8")


通过post提交表单:

在form表单的 method 设置 post方法提交(即method=”post”) ,

2、通过post方法请求参数提交到 Servlet程序中,request要在得到表单信息之前就设置编码方式
即在获取request中的请求参数之前设置:request.setCharacterEncoding("UTF-8");


二:response乱码解决:

服务器发给浏览器的数据默认是按照ISO-8859-1编码,浏览器接收到数据后按照默认的字符集进行解码后显示,如果浏览器的默认解码字符集不是ISO-8859-1,就出现乱码。

对于response乱码,只需要在服务器端指定一个编码字符集,然后通知浏览器按照这个字符集进行解码就可以了。有三种方式:

1、response.setCharacterEncoding("utf-8”);
//设置服务器端的编码,默认是ISO-8859-1;该方法必须在response.getWriter()之前进行设置
response.setHeader("contentType", "text/html; charset=utf-8”);
//通知浏览器服务器发送的数据格式是text/html,并要求浏览器使用utf-8进行解码。

2、response.setContentType("text/html;charset=utf-8”);
//等同于response.setHeader("contentType", "text/html; charset=utf-8”);
它其实会覆盖response.setCharacterEncoding("utf-8”) ,
在开发中只需要设置response.setContentType("text/html;charset=utf-8”)就可以了。意思是通知浏览  器服务器发送的数据格式是text/html,服务器采用utf-8编码,并要求浏览器使用utf-8进行解码。

3、response.setCharacterEncoding("utf-8”);//设置服务器端的编码为utf-8
response.getWriter().println("<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>”);//要求浏览器使用utf-8进行解码
可以看出,第二种方式是最简便的,这也是我们在开发中最常使用的方式。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  乱码 编码