struts.xml/////////////////////////////////////////////////////////////////////////////////////////////
 
<filter> 
<filter-name>struts2 </filter-name> 
<filter-class> 
org.apache.struts2.dispatcher.FilterDispatcher 
</filter-class> 
</filter> 
<filter> 
        <filter-name>filteraps </filter-name> 
        <filter-class>com.service.filtera </filter-class> 
    </filter> 
<filter-mapping> 
<filter-name>struts2 </filter-name> 
<url-pattern>/* </url-pattern> 
</filter-mapping> //////////////////////////////////////////////////////////////////////////////////////////////////////
package com.service; 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 filtera implements Filter { 
    public void destroy() { 
    } 
    public void doFilter(ServletRequest arg0, ServletResponse arg1, 
            FilterChain arg2) throws IOException, ServletException { 
        arg0.setCharacterEncoding("GBK"); 
        arg1.setCharacterEncoding("GBK"); 
        arg2.doFilter(arg0, arg1); 
    } 
    public void init(FilterConfig arg0) throws ServletException { 
    } 
} 然后我在每个java类前加入import javax.servlet.Filter; 我在对sql2000执行插入中文的语句时。数据库里的所有中文都显示为一串"??????"数字插入则正常。请问该怎么解决呢?

解决方案 »

  1.   

    页面的charset是什么?
    在从页面获取之后,插入数据库前,把这个字符串看一下是否乱码,定位乱码是由于web还是数据库
      

  2.   

    如果你是用Get方式提交的表单用arg0.serCharacterEncoding("GBK")不行
    得用
    String a= request.getParameter("name");
    a=new String(a.getBytes("ISO-8859-1"),"GBK");
      

  3.   


    这个只是tomcat下的Get的处理方式,不同的应用服务器是不一样的
      

  4.   

    你保存数据时已经是乱码了,数据保存之前打印出来看看,应该是乱码,接收时进行编码转换就可以了.还有struts2默认的编码是UTF-8,你把过滤器也换成UTF-8,jsp也为UTF-8试试看,我之前也遇到乱码情况,后来全改为UTF-8搞定了.
      

  5.   

    写一个转码函数就ok,public String chStr(String str){
                    if(str==null){
                            str="";
                    }else{
                            try{
                                    str=(new String(str.getBytes("iso-8859-1"),"GB2312")).trim();
                            }catch(Exception e){
                                    e.printStackTrace(System.err);
                            }
                    }
                    return str;
                }
      

  6.   

    使用Struts的中文处理机智不用在写过滤器
    方法:在Struts.xml文件中 加入<constant name="struts.i18n.encoding" value="gbk"></constant>
      

  7.   

    如果按照你的方法也行 你的文件XML文件写的有点问题修改一下
    <filter> 
    <filter-name>struts2 </filter-name> 
    <filter-class> 
    org.apache.struts2.dispatcher.FilterDispatcher 
    </filter-class> 
    </filter> 
    <filter> 
            <filter-name>filteraps </filter-name> 
            <filter-class>com.service.filtera </filter-class> 
    </filter> 
    <filter-mapping> 
    <filter-name>struts2 </filter-name> 
    <url-pattern>/* </url-pattern> 
    </filter-mapping> 
    <filter-mapping> 
    <filter-name>filteraps</filter-name> 
    <url-pattern>/* </url-pattern> 
    </filter-mapping> 
    这样你在试试
      

  8.   

     在所有的页面得写<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
      

  9.   

    而且要用post方法提交 web.xml里加个charactorFilter
      

  10.   

     <constant name="struts.i18n.encoding" value="gbk"> </constant>我原来的struts2  这样处理 就对了的
      

  11.   

    ......解决问题不是关键,知道原理才是最重要的,为什么一说到乱码总是说把页面设成gbk,utf-8.......如果别人已经配了过滤器,或者利用了其他的转码的机制,要根据具体情况才能解决,哪有只在页面写一下gbk就解决这么简单!!!