Wednesday, December 22, 2010

诡异的jsp编码

      关于jsp,sevlet,tomcat中中文乱码的问题,网上一搜一箩筐,不过有很多的解决方法太过于狭窄,很多用gb2312的方式来解决,结果显然会导致,假如不是中文,俄语,日语,还有其他乱七八糟的语言可能就会是乱码了,所以解决乱码问题,首先要确定的是在每一个地方,使用的encode都应该是UTF-8。
      确定了编码之后,那么就着手设置哪些地方为utf-8的编码

1.jsp页面中,有三处
  • <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
  • <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
2.tomcat config/server.xml中,解决get请求中的乱码问题
          <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443"
               useBodyEncodingForURI="true"
               URIEncoding="
UTF-8" />

3.项目中的WebContent/WEB-INF/web.xml中,添加过滤器(过滤器代码可以随便写个简单的即可),解决post请求中的乱码问题
<filter>
        <filter-name>encoding</filter-name>
        <filter-class>filter.FilterEncoding</filter-class>
            <init-param>
                <param-name>encoding</param-name>
                <param-value>UTF-8</param-value>
        </init-param>
    </filter>
    <filter-mapping>
            <filter-name>encoding</filter-name>
         <url-pattern>/*</url-pattern>
   </filter-mapping>

这样一来,直接部署在tomcat目录下的项目就可以解决乱码的问题,但是,我是在eclipse下面开发的项目,这个时候依然存在乱码问题,思索良久,找到了原因,因为eclipse下的动态项目运行web 应用的时候,并不是直接应用tomcat的配置,而是使用一个server的项目中的配置,如图:

这里面的配置影响了eclipse中的web项目的编码,因此需要更改此地的配置,然后我将其中的server.xml参考tomcat中的修改之后,并没有解决乱码问题(可能是我当时没有刷新),后来的解决办法是,删除这个server,然后重新添加server,目的是得到最新的tomcat的配置,这样,乱码问题即不复存在。



No comments:

Post a Comment