servlet乱码问题详解

来源:互联网 发布:美工基础知识 编辑:程序博客网 时间:2024/05/18 00:58

浏览器发送一次请求(带参数的)一般要经过浏览器->tomcat服务器->eclipse

浏览器、tomcat、eclipse都有自己的编码方式,如果这三种编码方式不一样自然会产生乱码。

tomcat默认的编码方式是iso-8859-1,如果我们不想更改tomcat的编码方式,就需要保持浏览器和eclipse字符集是一致的。



例如:

浏览器采用utf-8,tomcat采用iso-8859-1,eclipse采用utf-8。浏览器发送一段请求参数的编码过程:参数通过浏览器以utf-8的字符集格式发送给Tomcat服务器,

Tomcat服务器以iso-8859-1读取数据内容,这时候数据在Tomcat里是乱码的,但传到eclipse时又重新使用utf-8读取服务器传来的数据,这时读到的数据是正常的。

这个编码的经过就是utf-8->iso-8859-1->utf-8,自然不会乱码。



错误编码的列子:

utf-8->iso-8859-1->gbk,浏览器以utf-8发送数据,tomcat用iso-8859-1读数据,eclipse由使用gbk读数据,不乱码就怪了。



对于get请求和post请求出现乱码不同的解决方式

现在tomcat8及以上的版本接受get请求时不会出现乱码,tomcat8以下的版本对于get请求使用:request.getParameter("name").getBytes(“ISO-8859-1”),utf-8)

对于post请求使用request.setCharacterEncoding("utf-8"),此方法对get请求无效。

     

在我们响应给浏览器信息时,编码方式不对浏览器也会出现乱码。

解决方案:

①response.setCharsetEncoding("utf-8");  response.setHeader("content-type","text/html;charset=utf-8")

②response.setContentType("text/html;charset=utf-8")



原创粉丝点击