现在将常见的乱码问题分为jsp页面显示中文乱码、表单提交乱码两类。
1)jsp页面中显示中文乱码
在jsp文件中使用page命令指定响应结果的mime类型,如<%@ page language="java" contenttype="text/html;charset=gb2312" %>
2)表单提交乱码
表单提交时(post和get方法),使用request.getparameter方法得到乱码 ,这是因为tomcat处理提交的参数时默认的是iso-8859-1,表单提交get和post处理乱码问题不同,下面分别说明。
(1)post处理
对post提交的表单通过编写一个过滤器的方法来解决,过滤器在用户提交的数据被处理之前被调用,可以在这里改变参数的编码方式,过滤器的代码如下:
package org.lxh.myzngt.filter;
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;
public class encodingfilter implements filter {
private string charset = null;
public void destroy() {
}
public void dofilter(servletrequest req, servletresponse resp,
filterchain chain) throws ioexception, servletexception {
req.setcharacterencoding(this.charset);
chain.dofilter(req, resp);
public void init(filterconfig arg0) throws servletexception {
this.charset = arg0.getinitparameter("charset");
}
web.xml加入
<filter>
<filter-name>encoding</filter-name>
<filter-class>
org.lxh.myzngt.filter.encodingfilter
</filter-class>
<init-param>
<param-name>charset</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>spring charseter encoding filter</filter-name>
org.springframework.web.filter.charseterencodingfilter
<param-name>encoding </param-name>
(2) get方法的处理
tomcat对post和get的处理方法不一样,所以过滤器不能解决get的乱码问题 ,它需要在其他地方设置。
打开<tomcat_home>\conf目录下server.xml文件,找到对8080端口进行服务的connector组件的设置部分,给这个组件添加一个属性:uriencoding="gbk"。修改后的connector设置为:
java代码
enablelookups="false" redirectport="8443" acceptcount="100"
connectiontimeout="20000" disableuploadtimeout="true"
uriencoding="gbk" />
* 注意修改后重新启动tomcat才能起作用。