Servlet 中文乱码解决

本文介绍了在Web应用中遇到的中文乱码问题及其解决方案。尝试了多种方法如设置response和request编码、修改Server.xml文件等均未奏效,最终通过自定义Filter实现了中文字符的正确显示和存储。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基本的编辑页面做好了,不过中文老是出现乱码,狂晕,怎么解决都不行,在网上查了很久,很多人都说通过下面这个方式解决:

response.setContentType("text/html;charset=GB2312");
    request.setCharacterEncoding("GB2312");

不过,我用了,怎么也不行,老是出现错误,还是乱码,唉,看来还是不治本.

后来有个说通过修改../conf/Server.xml解决

<Connector port="9111" maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
    enableLookups="false" redirectPort="8443" acceptCount="100"
    connectionTimeout="20000" disableUploadTimeout="true" URIEncoding='GBK' />

不过还是乱码,看来还是不行....

后来,有人说通过Filter解决,从网上找了一个程序,唉,真的行啊,而且存入数据库里也是正确的,呵呵

java程序如下:

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;
import javax.servlet.UnavailableException;
public class EncodingFilter implements Filter {
   protected String encoding = null;   
   protected FilterConfig filterConfig = null;
      public void destroy() { 
            this.encoding = null;   
                this.filterConfig = null; 
                  } 
    public void doFilter(ServletRequest request, ServletResponse response,
         FilterChain chain)
         throws IOException, ServletException {
   // Select and set (if needed) the character encoding to be used
         String encoding = selectEncoding(request);  
             if (encoding != null)        {    
                    request.setCharacterEncoding(encoding);
                           }
    // Pass control on to the next filter
           chain.doFilter(request, response); 
             }  
     public void init(FilterConfig filterConfig) throws ServletException {
     this.filterConfig = filterConfig; 
           this.encoding = filterConfig.getInitParameter("encoding");
               }  
      protected String selectEncoding(ServletRequest request) {
             return (this.encoding); 
               }
             }

在网站webapp/WEB-INF/web.xml中添加:

   <filter>
  <filter-name>Set Character Encoding</filter-name>
  <filter-class>blog.util.EncodingFilter</filter-class>
<init-param>
 <param-name>encoding</param-name>
  <param-value>GBK</param-value></init-param>
  </filter>
  <filter-mapping>
  <filter-name>Set Character Encoding</filter-name>
  <url-pattern>/*</url-pattern>
  </filter-mapping>

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值