Java Web常见乱码解决

java web开发中产生乱码问题的原因有很多,解决乱码的问题也有很多,现在就一一来看一下:

出现乱码的地方大致可以分为以下三种:

1 jsp页面中 
2 jsp页面之间相互传参的参数
数据库中数据的存取
解决方案大致可以分为三种:

  1 出现在jsp页面中,是由于没有设置jsp页面的中文字符编码。
  2 出现在jsp页面之间相互传参,是由于参数没有设置正确的字符编码。
  3 以上2个问题解决了,那么存到数据库中,自然就不存在乱码。除非你对存入到数据库里的数据再次进行编码。

具体的解决方法:

1.在表单页面头部设置字符编码为utf-8
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

加上这句解决jsp页面中的中文乱码显示,tomcat编译完后向客户端输出的html文件不是采用中文编码,所以会导致乱码产生。


 2.设置页面请求和回应的编码:

 <%request.setCharacterEncoding("utf-8");

  response.setCharacterEncoding("utf-8"); %>

加上这句解决jsp页面中的中文参数传递乱码。把浏览器默认使用的编码设置为“UTF-8”发送请求参数。

3.String(request.getParameter("name").getBytes("ISO8859_1"),"utf-8");这句的意思是,把传来的参数全部编码转换成utf-8,这样做的缺点是每次传来一个参数都要这样写,很麻烦。

同样可通过设置server.xml配置文件来实现。

  1. < Connector  
  2. port ="8080"   
  3. maxHttpHeaderSize ="8192"   
  4. maxThreads ="150"   
  5.  minSpareThreads ="25"    
  6. maxSpareThreads ="75"   
  7. enableLookups ="false"   
  8.  redirectPort ="8443"    
  9. acceptCount ="100"   
  10. connectionTimeout ="20000"   
  11.  disableUploadTimeout ="true"     
  12. URIEncoding ="utf-8"/>   
<span style="color:#000000;">< Connector
port ="8080" 
maxHttpHeaderSize ="8192" 
maxThreads ="150" 
 minSpareThreads ="25"  
maxSpareThreads ="75" 
enableLookups ="false" 
 redirectPort ="8443"  
acceptCount ="100" 
connectionTimeout ="20000" 
 disableUploadTimeout ="true"   
URIEncoding ="utf-8"/> 

</span>



但是这样就应用到整个webapp中去了。

4.还可以修改web.xml文件,配置一个过滤器。其原理都一样,只是换种方式而已

1.编写过滤器类:

  1. package org.RN.util;  
  2.   
  3. import java.io.IOException;  
  4.   
  5. import javax.servlet.Filter;  
  6. import javax.servlet.FilterChain;  
  7. import javax.servlet.FilterConfig;  
  8. import javax.servlet.ServletException;  
  9. import javax.servlet.ServletRequest;  
  10. import javax.servlet.ServletResponse;  
  11.   
  12. public class Encoding implements Filter {  
  13.    @SuppressWarnings("unused")  
  14.    private FilterConfig config=null;  
  15.    String encoding=null;  
  16.  public void destroy() {  
  17.   this.encoding=null;  
  18.   this.config=null;  
  19.   
  20.  }  
  21.   
  22.  public void doFilter(ServletRequest request, ServletResponse response,  
  23.    FilterChain chain) throws IOException, ServletException {  
  24.      if(encoding!=null)  
  25.       request.setCharacterEncoding(encoding);  
  26.      chain.doFilter(request, response);  
  27.        
  28.   
  29.  }  
  30.   
  31.  public void init(FilterConfig arg0) throws ServletException {  
  32.   this.config=arg0;  
  33.   this.encoding=arg0.getInitParameter("encoding");  
  34.   
  35.  }  
  36.   
  37. }  
<span style="color:#000000;">package org.RN.util;

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 Encoding implements Filter {
   @SuppressWarnings("unused")
   private FilterConfig config=null;
   String encoding=null;
 public void destroy() {
  this.encoding=null;
  this.config=null;

 }

 public void doFilter(ServletRequest request, ServletResponse response,
   FilterChain chain) throws IOException, ServletException {
     if(encoding!=null)
      request.setCharacterEncoding(encoding);
     chain.doFilter(request, response);
     

 }

 public void init(FilterConfig arg0) throws ServletException {
  this.config=arg0;
  this.encoding=arg0.getInitParameter("encoding");

 }

}

</span>



 2.web.xml配置

  1. <filter>  
  2.   <description>缓存过滤</description>  
  3.   <filter-name>Encoding </filter-name>  
  4.   <filter-class>  
  5.    filter.Encoding  
  6.   </filter-class>  
  7.  </filter>  
  8.  <filter-mapping>  
  9.   <filter-name>Encoding </filter-name>  
  10.   <url-pattern>*</url-pattern>  
  11.  </filter-mapping>  
<span style="color:#000000;"><filter>
  <description>缓存过滤</description>
  <filter-name>Encoding </filter-name>
  <filter-class>
   filter.Encoding
  </filter-class>
 </filter>
 <filter-mapping>
  <filter-name>Encoding </filter-name>
  <url-pattern>*</url-pattern>
 </filter-mapping></span>
  1. </filter>  
<span style="color:#000000;"></filter>
</span>



5.还有一种常见的乱码问题就是下载时出现文件名乱码

原来处理下载的代码如下:
response.setHeader("Content-Disposition", "attachment; filename=" + java.net.URLEncoder.encode(fileName, "UTF-8"));

URLEncoder类包含将字符串转换为application/x-www-form-urlencoded MIME 格式的静态方法。

URLDecoderURLEncoder 类相对应的URLDecoder 类有两种静态方法。它们解码以x-www-form-url-encoded这种形式编码的string。也就是说,它们把所有的加号(+)转换成空格符,把所有的%xx分别转换成与之相对应的字符:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值