使用filter过滤器解决编码问题

原创 2014年04月30日 11:04:20

         乱码问题在java开发中很是常见,出现场合有jsp页面显示,数据库存值取值,xml解析等。在开发中统一编码,遵守规范,是避开这些恼人问题的良方。

    一:保证页面支持中文

         页面编码建议使用UTF-8,  如在jsp页面统一使用以下文件头,这个依据具体情况使用合适的编码方式

   <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

    二:servlet

        对于POST请求可以在获取请求信息之前调用 request.setCharacterEncoding(charSet) 设置字符编码。设置的字符编码需要和页面设置的字符编码一致!如我们前面在页面中使用了utf-8,这里就应该为utf-8。

         对于GET 请求,默认情况下,request.setCharacterEncoding(charSet) 对其不适用。因为 request.setCharacterEncoding(charSet)  只能影响到请求体的编码。对于 Tomcat 服务器而言,需要修改 server.xml 文件的 Connector 节点,添加 URIEncoding 属性或 useBodyEncodingForURI 属性

	<Connector URIEncoding="UTF-8" connectionTimeout="20000" port="80" 
	protocol="org.apache.coyote.http11.Http11NioProtocol" redirectPort="8443"/>

   三:过滤器

     将设置字符编码的代码放入一个过滤器中,具体实现如下:

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class EncodingFilter implements Filter {

    public EncodingFilter() {}

	public void destroy() {}

	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		
		ServletContext servletContext = filterConfig.getServletContext();
		String encoding = servletContext.getInitParameter("encoding");
		request.setCharacterEncoding(encoding);
		response.setCharacterEncoding(encoding);
		chain.doFilter(request, response);
	}

	private FilterConfig filterConfig;
	
	public void init(FilterConfig fConfig) throws ServletException {
		this.filterConfig = fConfig;
	}

}

之后需要在web.xml中配置一下

web.xml

 	<context-param>
	    <param-name>encoding</param-name>
	    <param-value>UTF-8</param-value>
	  </context-param>
	<filter>
	    <display-name>EncodingFilter</display-name>
	    <filter-name>EncodingFilter</filter-name>
	    <filter-class>com.test.filter.EncodingFilter</filter-class>
	  </filter>
	  <filter-mapping>
	    <filter-name>EncodingFilter</filter-name>
	    <url-pattern>/*</url-pattern>
	  </filter-mapping>

大部分的编码问题到以上也就结束了,但是如果碰到从别的地方接收请求,出现了乱码,又该怎么办呢?

可以用如下代码来转,

String content=new String(req.getParameter("education").getBytes("iso-8859-1"),"utf-8")
无论编码为iso-8859-1,gb2312、gbk、或是其他,getBytes("")相应的也得随着改变,可以将字符编码转成自己想要的格式


(附:微信手机端发信格式为gbk...)


相关文章推荐

tomcat8 编写字符编码Filter过滤器无效问题

同事遇到编码问题时想做一个解决全站的字符编码过滤器,过滤器类和配置如下: 过滤器类: package com.chaoxing.newspaper.web.filter; import java.i...

javaweb开发中的中文乱码问题,使用Filter过滤器解决

get请求和post请求时候的中文乱码问题 1.当form表单中的请求为get请求的时候 例如获取用户名:String username = new String(username.getByte...

过滤器[登录+编码]filter在程序中的使用

虽然很久没有写WEB程序了,但依然怀念那些写WEB和日子。看了下以前的毕业设计,从中提取说一些小例子。写在这里。 这里讲解的是其中filter中使用。主要用于两个方面。一个是编码的设置和登录的拦截验...

Jsp乱码问题的基本解决方案,转码 + 过滤器 Filter

利用转码&过滤器的方式解决Jsp中常见的两种中文乱码情况.

关于Filter解决全网乱码问题的总结 --- 包装类 编解码 过滤器

中国的程序猿在编程过程中免不了要解决乱码问题,针对不同的提交方式有不同的解决方式。这两天刚好在学这个知识点,在此做一个简单的小结。首先要明白乱码出现的原因:乱码出现的根本原因是http协议不支持中文在...

[Filter过滤器]解决缓存网站图片,css,js等问题

网站图片(gif,jpg等),css,js等不常改变的,可以考虑使用过滤器技术进行缓存 /*--------------------------XML---------------------*/ ...
  • gemman
  • gemman
  • 2013年03月22日 18:16
  • 971

jsp filter过滤器 解决post 以及get乱码问题

不多说了 直接贴代码: import java.io.IOException; import java.util.Map; import java.util.Set; import javax.se...

小数学解决大问题 - 布隆过滤器 Bloom Filter(由数字进制想到)

布隆过滤器 Bloom Filter在很多博客中的有提到,但是我希望在本篇博客中按照我的理解将Bloom Filter尽量简单的呈现出来。其实从人类起源开始,人类就在尝试利用语言来描述世界,而语言恰恰...

JavaEE Filter全局编码过滤器

  • 2016年09月25日 20:41
  • 17KB
  • 下载

在Filter过滤器中使用req.getPathInfo方法的返回值问题

当一个请求发生,比如说是 http://localhost/text/servlet/1则会产生在服务器中实例化一个request内置对象,         并且分析请求对象的路径的信息,比如该对象请...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用filter过滤器解决编码问题
举报原因:
原因补充:

(最多只允许输入30个字)