java web乱码及解决方法

一、中文乱码说明

在Java Web项目中,由于pageEncoding、contentType和charset等编码属性的设置不恰当往往导致显示中文字符会出现乱码问题。例如,在Java Web项目的代码采用UTF-8进行编码,而在浏览器使用ISO-8859-1进行编码,因此会产生中文乱码问题。

 

二、相关知识

  1.JSP中pageEncoding、contentType以及contentType的charset的理解与区别:

1)pageEncoing:设置JSP源文件本身和响应正文中的字符集编码;

2)contentType:设置JSP原文建和响应正文中的字符集编码以及MIME类型;

3)charset:设置服务器发送给客服端时的内容的字符集编码。

  2.在Java Web项目中,通常情况下,产生中文乱码有三种情况:

第一种情况:调用JSP页面时产生中文乱码;

第二种情况:调用Servlet页面时产生中文乱码;

第三种情况:通过post请求传递包含中文字符的表单时出现中文乱码。

  3.几种常见的编码格式:

1)ISO-8859-1:属于单字节编码,最多能表示字符范围为0-255,应用于英文系列;

2)GB2312/GBK:是汉字的国标码,专门用来表示汉字,是双字节编码,而英文字母和ISO-8859-1一致。其中GBK编码能够用来同时表示繁体字和简体字,而GB2312只能表示简体字,GBK是兼容GB2312编码;

3)UTF-8:是一种用以解决国际上字符的多字节编码,它对英文使用一个字节,对中文使用三个字节进行编码,是国际上比较通用的字符编码。

解决方案

     解决思路:根本上就是使编码保持一致,即:

      1、JSP的字符编码格式。(JSP页面的头部添加<%@page contentType="text/html"pageEncoding="UTF-8"%>或者将pageEncoding中的值改为UTF-8)

      2、Request的字符编码格式。

           1)(request.setCharacterEncoding( UTF-8));

           2)spring的字符集过滤器org.springframework.web.filter.CharacterEncodingFilter配置,如:     

  <filter>
    <description>字符集过滤器</description>
    <filter-name>encodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <description>字符集编码</description>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  <filter>

但以上方法只对post 有效,而当HTTP请求以GET方式发出时,请求参数位于请求头的URI中。过滤器只对请求体中的内容编码,而请求头不编码,Tomcat对于GET请求会使用iso-8859-1编码(tomcat默认编码)。

get请求

1、修改tomcat的编码

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

 2、但有时需要根据文档调用第三方接口。这时可以采用。

new String(key.getBytes("iso8859-1"), "utf-8");

 3、在客户端使用 URLEncoder.encode(“中文”,”UTF-8”)对中文参数进行编码,在服务器端需要进行解码this.setName(java.net.URLDecoder.decode(name, “UTF-8”)); 

     

 

posted @ 2018-04-11 19:47  小哥z  阅读(584)  评论(0编辑  收藏  举报