使用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...)


Filter过滤器处理乱码问题

当我们从表单获取数据时。 当获取到的数据是中文时,那么就可能会产生乱码。对于Post方式提交的数据,我们可以通过直接设置request和response的编码方式来解决乱码问题。但是Get方式提交的...
  • melissa_heixiu
  • melissa_heixiu
  • 2016-09-29 22:25:16
  • 1212

全局过滤器解决编码问题

为了解决每次get或者post方式提交数据的时候,编码解码方式不同导致乱码的问题,直接在过滤器中自动过滤 新建过滤器Filter public class GlobalDecodeFilter i...
  • qq_21923867
  • qq_21923867
  • 2017-03-08 20:11:53
  • 594

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

get请求和post请求时候的中文乱码问题 1.当form表单中的请求为get请求的时候 例如获取用户名:String username = new String(username.getByte...
  • u012661010
  • u012661010
  • 2017-03-09 12:34:09
  • 1016

过滤器案例----解决全站中文乱码问题

全站乱码案例:      * 利用Servlet的doGet()和doPost()方法中,可以解决中文乱码: * doGet() String value = requ...
  • CSDN_GIA
  • CSDN_GIA
  • 2017-01-05 18:27:12
  • 1648

使用Filter过滤器解决字符编码问题

Java中的字符编码,默认为:ISO-8859-1(西方编码)。这种编码方式为单字节码,只支持英文、俄文、葡萄牙文等乱七八糟文,不支持中文。因此,我们需要对JSP页面或者Servlet中进行字符编码集...
  • qq_40087415
  • qq_40087415
  • 2017-11-18 22:40:12
  • 215

hibernate过滤器的使用方法

当我们使用hibernate并配置了关联关系时,如一对多,有时候我们查取一的一端的时候,并不需要把多的一端全部查询出来,而是需要一些符合条件的,这时就用到了hibernate过滤器。 比如,有员工St...
  • lkl713
  • lkl713
  • 2014-02-21 17:58:33
  • 2100

filter过滤器解决全局编码问题

java 源码文件 package cn.itheima.web.filter; import java.io.IOException; import java.io.UnsupportedEnc...
  • hou973561160
  • hou973561160
  • 2017-09-01 13:21:32
  • 242

过滤器解决form表单中中文乱码问题

form表单中post请求的乱码问题很容易解决,只需设置request请求的响应头就OK了,但是get请求就不是那么容易解决的,下面就是在不改变服务器配置文件的前提下,利用过滤器将浏览器所有的请求的乱...
  • jjaze3344
  • jjaze3344
  • 2011-11-23 21:51:34
  • 3427

Java Web中使用filter(过滤器)的原因

过滤器是什么?为什么要使用过滤器,首先,我们来介绍一下下面的情形: 1、为了解决中文乱码的问题,我们经常在代码段中能够看到一段代码 request.s...
  • suwu150
  • suwu150
  • 2016-04-27 12:43:16
  • 846

过滤器解决get和post方式提交的中文乱码

对于国内的程序员来说,在做项目时避免不了的问题是中文乱码问题。        如果不使用过滤器的话,在每个servlet中都要进行设置编码,如果是post请求还好,但是如果是get请求,就要手动进行...
  • hyn150
  • hyn150
  • 2017-04-19 21:23:34
  • 2130
收藏助手
不良信息举报
您举报文章:使用filter过滤器解决编码问题
举报原因:
原因补充:

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