Java web处理各种乱码问题

java乱码问题处理

关于乱码,我在网上看到一篇文章讲的很细致,可以参考一下:
乱码
       我们在做JavaWeb项目时,经常会遇到乱码问题,这是无法避免的。产生乱码的原因有很多。例如Tomcat、jsp、html、http(get、post请求乱码问题)。所以产生乱码之后我们应该先确定产生乱码的原因,然后对症下药。下边介绍几种解决乱码问题的方法。

  1. html页面中中文乱码。
    a. 问题:html中出现乱码的主要原因是html源码中文字内容与html编码不同造成。网页的编码为ISO-8859-1,二中文编码为utf-8。
    b. 解决方法:在页面顶部…中加上以下代码

    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    
  2. jsp页面中中文乱码。
    a. 问题:jsp文件通常头部是自动生成的,而默认的编码往往是ISO-8859-1,其不支持中文,所以页面中会出现乱码。
    b. 解决方法:页面顶部代码参看下列代码

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    
  3. http请求乱码问题。
    a. get请求乱码。
    解决方法:在后台获取到字符串后对编码进行转化,如常见的编码ISO-8859-1,代码如下

        String name = request.getParameter("name");
    	name=new String(name.getBytes("ISO-8859-1","utf-8"));
    

    b.post请求乱码。

    response.setCharcacterEncoding("utf-8");
    
  4. 关于配置Tomcat的URIEncoding。
    a. 问题:程序需要发送http GET请求到服务器,请求的参数中包含了中文字符。程序中参数为UTF-8格式,且经过了UTF-8 URL编码再发送。使用的tomcat服务器,但服务器端后台程序中取到的参数的中文是乱码。
    b. 解决方法:修改Tomcat的Server.xml(Tomcat安装目录下),在Connector标签中加上URLEncoding参数。

    <Connector port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" debug="99" connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="UTF-8"/>
    

           除了使用上述方法解决乱码问题外,还可以使用过滤器解决。

    1. 首先写一个Java Class ,让其实现Filter类
    package servlet;
    
    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 CharacterEncode implements Filter {
        String encode=null;
        @Override
        public void destroy() {
    	    // TODO Auto-generated method stub
    	    encode=null;
        }
        
    	@Override
    	public void doFilter(ServletRequest request, ServletResponse response,
    		FilterChain filterChain) throws IOException, ServletException {
    		// TODO Auto-generated method stub
    		if (encode!=null) {
    			request.setCharacterEncoding(encode);
    			response.setContentType("text/html;charset="+encode);
    		}
    		filterChain.doFilter(request, response);
    	}
    
    	@Override
    	public void init(FilterConfig filterConfig) throws ServletException {
    		// TODO Auto-generated method stub
    		encode=filterConfig.getInitParameter("encoding");
    	}
    }
    
    
    1. 在web.xml中配置过滤器
    <filter>
    	<filter-name>CharacterEncode</filter-name>
    	<filter-class>servlet.CharacterEncode</filter-class>
    	<init-param>
    		<param-name>encode</param-name>
    		<param-value>UTF-8</param-value>
    	</init-param>
    </filter>
    <filter-mapping>
    	<filter-name>CharacterEncode</filter-name>
    	<url-pattern>/*</url-pattern>
    </filter-mapping>
    

       经过以上设置,乱码问题就可以解决,我们就可以愉快的继续写项目了,哈哈哈。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值