现在的位置: 首页 > 综合 > 正文

tomcat下中文乱码

2012年08月30日 ⁄ 综合 ⁄ 共 2703字 ⁄ 字号 评论关闭

问题描述:

1 表单提交的数据,用request.getParameter(“xxx”)返回的字符串为乱码或者??

2 直接通过url如http://localhost/a.jsp?name=中国,这样的get请求在服务端用request. getParameter(“name”)时返回的是乱码;按tomcat4的做法设置Filter也没有用或者用request.setCharacterEncoding("GBK");也不管用

原因:

1 tomcat的j2ee实现对表单提交即post方式提示时处理参数采用缺省的iso-8859-1来处理

2 tomcat对get方式提交的请求对query-string 处理时采用了和post方法不一样的处理方式。(与tomcat4不一样,所以设置setCharacterEncoding(“gbk”))不起作用。

解决办法:

get方式的解决办法

1) 打开tomcat的server.xml文件,找到区块,加入如下一行:

URIEncoding=”GBK”

完整的应如下:

<Connector

port="80" maxThreads="150" minSpareThreads="25" maxSpareThreads="75"

enableLookups="false" redirectPort="8443" acceptCount="100"

debug="0" connectionTimeout="20000"

disableUploadTimeout="true"

URIEncoding="GBK"

/>

重启tomcat,一切OK。

POST提交的数据乱码

  现象:通过表单提交的数据出现乱码。

  原因:原因未明。可能是Tomcat在接收到请求后,并没有能够根据request中的信息提前正确的编码方式。

  解决:可以添加一个设置字符集的Filter。

//=================初学者注意,请将此文件放在WEB-INF/classes/filters下,
//注意先以SetCharacterEncodingFilter.java保存,然后编译一下,推荐使用eclipse
package filters;

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.UnavailableException;

public class SetCharacterEncodingFilter implements Filter {
 protected String encoding = null;
 protected FilterConfig filterConfig = null;
 protected boolean ignore = true;

 public void destroy() {
  this.encoding = null;
  this.filterConfig = null;
 }

public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain)
throws IOException, ServletException {

 // Conditionally select and set the character encoding to be used
 if (ignore || (request.getCharacterEncoding() == null)) {
  String encoding = selectEncoding(request);
  if (encoding != null)
   request.setCharacterEncoding(encoding);
 }

 // Pass control on to the next filter
 chain.doFilter(request, response);

}

public void init(FilterConfig filterConfig) throws ServletException {

 this.filterConfig = filterConfig;
 this.encoding = filterConfig.getInitParameter("encoding");
 String value = filterConfig.getInitParameter("ignore");
 if (value == null)
  this.ignore = true;
 else if (value.equalsIgnoreCase("true"))
  this.ignore = true;
 else if (value.equalsIgnoreCase("yes"))
  this.ignore = true;
 else
  this.ignore = false;

}

protected String selectEncoding(ServletRequest request) {
 return (this.encoding);
}

}
//==================这段代码是我在网上摘录的,因为不知到出处所以无法标明作者
//然后将下面<filter>开始的代码加入到web.xml中,它位于WEB-INF下。
//我的QQ:22070699
//配置web.xml

<filter>
 <filter-name>Set Character Encoding</filter-name>
 <filter-class>filters.SetCharacterEncodingFilter</filter-class>
 <init-param>
  <param-name>encoding</param-name>
  <param-value>GBK</param-value>
 </init-param>
</filter>

<filter-mapping>
 <filter-name>Set Character Encoding</filter-name>
 <url-pattern>/*</url-pattern>
</filter-mapping>

抱歉!评论已关闭.