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

         乱码问题在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...)


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值