在开发中难免会遇到中文显示乱码的问题,乱码问题是一个很棘手的问题,
出现上述的原因是因为Tomcat对get和post两种提交方式的处理方法不一样造成的。自从Tomcat5.x开始,GET和POST方法提交的信息,Tomcat采用了不同的方式来处理编码,对于POST请求,Tomcat会仍然使用request.setCharacterEncoding方法所设置的编码来处理,如果未设置,则使用默认的iso-8859-1编码。而GET请求则不同,Tomcat对于GET请求并不会考虑使用request.setCharacterEncoding方法设置的编码,而会永远使用iso-8859-1编码
所以解决的办法有:
如果是get和post方法中的参数在后台都要使用,并且用到的是一个地方,那么转码的方式肯定是不行的,那么需要在tomcat下的server.xml中加上URIEncoding="UTF-8",即加在
<Connector URIEncoding="UTF-8" port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
如果不是第一种情况 那么用转码的方式就可以
new String(className.getBytes("ISO8859-1"),"UTF-8")
<pre name="code" class="html" style="margin-top: 0px; margin-bottom: 0px; padding: 0px; word-wrap: break-word;">需要说明的是,需要设置过滤器和jsp中的编码,其中
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<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>
相当于是
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
在页面中也需要设置
<%@ page language="java" import="java.util.*" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
一、表单提交的乱码处理
表单提交分为GET和POST两种提交方式。两种方式的乱码解决又不一样,用POST提交只需要在接受的时候加上request.setCharacterEncoding("utf-8");而GET方法处理应该将接收过来的值打碎成ISO-8859-1编码的,然后再组装成UTF-8的,new String(request.getParameter(param).getBytes("iso8859-1"),"UTF-8");
二、过滤器处理乱码问题
如果每次接收都像上面那样去处理的话肯定是太麻烦了,用过滤器来处理请求的乱码问题很方便,只需要写一个过滤器,就可以过滤所有请求页面的乱码问题了。
三、ajax请求的乱码问题
如果使用ajax出现了乱码问题这样解决:前端ajax函数的请求的url里面中文参数用两个encodeURI()函数处理,var url = "user.do?p=checkUser&name=" + encodeURI(encodeURI(username.value));而服务器端则用 URLDecoder.decode()函数去接收,string userName = URLDecoder.decode(request.getParameter("name"),"utf-8"); 这样就能够解决ajax请求中乱码的问题了。
四、链接请求中乱码问题(IE6)
使用链接请求传递中文参数时在IE6里面会出现乱码,解决方法如下:使用encodeURI(param)对中文参数处理一下就行了,如location = "users.do?p=login&&username="+encodeURI(username)+"&password="+encodeURI(password);