java web 默认为 ISO8895-1
1,调用JSP页面显示乱码
(1) 通过浏览器调用JSP页面,在浏览器中所有的中文内容出现乱码
(2) 首先确认本JSP在编辑器中保存文件内容时,使用的是UTF-8的编码格式,然后在JSP页中页面中的开始处添加
<%@ pageEncoding="UTF-8"%> 就可以解决这个中文乱码的问题。
2,调用servlet页面显示乱码
(1) 通过浏览器调用servlet,servlet在浏览器中显示的内容出现乱码
(2) 在servlet使用response对输出内容先执行response.setContext("text/html; charset=utf-8") 设定输出的内容编码为utf-8
3,POST表单参数乱码
(1) 通过jsp页面,HTML页面或者servlet中的表单元素提交参数给对应的JSP页面或servlet,而JSP页面或者servlet接收的中文参数值乱码。
(2) 在接收post提交的参数之前,使用request.setCharacterEncoding("UTF-8")设定接收参数的内容使用UTF-8编码。
4,URL方式传递参数乱码
(1) 使用表单传递参数,可以通过POST或GET方式。不使用表单,还可以使用链接方式传递参数,这种传递参数的方式本质上是和GET方式传递参数一样,这种传弟参数的值是中文,也会出现乱码。
(2) 对于这种情况,修改 服务器TOMCAT目录下,web/conf/server.xml
<connector port="8080" potocol="..." ..... URIEncoding="UTF-8">
5, 最通用的方法,设置过滤器
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 CharacterEncodingFilter implements Filter { private FilterConfig config; private String encoding = "ISO8859_1"; public void destroy() { config = null; } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { request.setCharacterEncoding(encoding); chain.doFilter(request, response); } public void init(FilterConfig config) throws ServletException { this.config = config; String s = config.getInitParameter("encoding"); if (s != null) { encoding = s; } } }
定义一个CHINESE类,来对所有传入的数据进行转换。
然后在web.xml里加入这样一段代码
<filter> <filter-name>EncodingFilter</filter-name> <filter-class> com.tool.CharacterEncodingFilter </filter-class> <init-param> <param-name>encoding</param-name> <param-value>GB2312</param-value> </init-param> </filter>