Eclipse项目中乱码问题的解决办法

一、产生的原因:

  1、Http协议进行通信的时候是基于请求和响应的,传输的内容我们称之为报文!

  2、Http协议会按照一定的规则将报文编码,然后在读取的时候再使用响应的解码格式进行解码!

  3、这个一定的规则指的就是字符集:ASCII,iso8859-1,gbk,gb2312,utf-8

  4、编码:将字符按照字符集转化为二进制格式

  5、解码:将二进制代码按照响应的字符集转化为字符!


  乱码的根本原因:就是编码和解码指定的字符集不一致造成的!

二、字符集:

  1、ASCII字符集:美国信息交换标准代码,,单字节编码,主要用于显示现代英语

  2、ISO8859-1字符集:单字节编码,ISO-8859-1收录的字符除ASCII收录的字符外,还包括西欧语言、希腊语、泰语、阿拉伯语、希伯来语对应的文字符号

  3、GB2312字符集:中国国家标准简体中文字符集,收录常用汉字

  4、GBK字符集:汉字内码扩展规范,向下兼容GB2312,兼容Unicode 编码,GBK是采用单双字节变长编码

  5、UTF-8:是一种针对Unicode的可变长度字符编码,又称万国码,用在网页上可以统一页面显示中文简体繁体及其它语言(如英文,日文,韩文)。

三、解决办法:

  1、请求报文:
    浏览器编码---------->服务器解码

      浏览器是按照给定页面的编码格式进行编码的,所以只需要设置网页的编码格式为utf-8就可以了!

    get请求

    解码:使用的是tomcat默认的解码格式,默认是iso8859-1;

     针对Get方式的乱码问题,由于参数是通过URL传递的,所以通过request设置的编码格式是不起作用的,此时可以在每次发生请求之前对URL进行编码:

      例如:Location.href="/encodeURI"("http://localhost/test/s?name=中文&sex=女");

     更简便的方法,那就是在服务器端配置URL编码格式:

       我们在server.xml文件中设置:

        <Connector URIEncoding="utf-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>

   
 post请求

    解码:使用的是tomcat默认的解码格式,默认是iso8859-1;

      在服务器端我们使用的是:req.setCharacterEncoding("utf-8");来设置解码格式

    注意:req.setCharacterEncoding("utf-8")一定要设置在第一次获取请求参数之前!


  2、响应编码
    服务器编码------------->浏览器解码

      1)第一种解决方案:

        resp.setCharacterEncoding("utf-8");

        resp.setHeader("Content-Type", "text/html;charset=utf-8");

      2)第二种解决方案:

        resp.setHeader("Content-Type", "text/html;charset=utf-8");

      3)第三种方案:

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

Content-Type
  用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件
CharacterEncoding
  作用是设置对客户端请求进行重新编码的编码

也就是说一个是设置读,一个是设置取
posted @ 2017-11-15 19:43  咕噜噜zmj  阅读(1162)  评论(0编辑  收藏  举报