遇到中文处理问题,使用的架构是
Struts1.2+Hibernate3.1 
工具
Eclipse3.3 +myeclipse6.0
在页面提交又中文时.才Action的request里面全是乱码.就算调用request.setCharacterEncoding()方法还是乱码
页面编码GBK.GB2312和UFT-8都试过了
写过滤器也不能解决
如果换标签(开始用的heml:form的struts标签,换成form这种html标签)的换就不会出现乱码问题
开始以为是Eclipse的问题,后来换Eclipse3.1还是不行
请问有没有人也遇到过这种问题,怎么解决的?Struts1.2和Struts1.1的运行机制又什么改变吗?

解决方案 »

  1.   

    现在在tomcat6.0的conf/server.xml中设置页面编码没用
    在jsp页面用pageEncoding没用
    在Action中用request.setCharacterEncoding()也没用
    过滤器也没用
    但是在页面使用html标签,比如text,form而不用html:text   html:form
    就不会出现中文问题.但是不可能不用struts的标签啊.
      

  2.   

    在web.xml中配置一下就可以了
     <filter>
       <filter-name>encodingFilter</filter-name>
       <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
       <init-param>
        <param-name>encoding</param-name>
        <param-value>gb2312</param-value>
       </init-param>
      </filter>
      <filter-mapping>
       <filter-name>encodingFilter</filter-name>
       <url-pattern>/*</url-pattern>
      </filter-mapping>
      

  3.   

       1.  MyRequestProcessor.java
       2. package StudyNews;
       3.
       4. import javax.servlet.http.HttpServlet;
       5. import javax.servlet.http.HttpServletRequest;
       6. import javax.servlet.http.HttpServletResponse;
       7. import org.apache.struts.action.RequestProcessor;
       8.
       9. import org.apache.struts.config.ForwardConfig;
      10. import org.apache.commons.logging.Log;
      11.
      12.
      13. public class MyRequestProcessor extends RequestProcessor {
      14.
      15. public MyRequestProcessor() {}
      16.
      17. protected boolean processPreprocess( HttpServletRequest request,
      18. HttpServletResponse response ){
      19.
      20. try{
      21. request.setCharacterEncoding("latin1");//此处为自己用的数据库的字符集 <4>
      22.
      23. }
      24. catch(Exception ex){
      25. System.out.println("字符集设置失败");
      26.
      27. }
      28.
      29. return true;
      30. }
      31.
      32. }xml 代码    <controller processorClass="StudyNews.MyRequestProcessor" />
    详细见此文。基于struts的乱码最好解决了
    http://bangyan2003.javaeye.com/admin/show/131754
      

  4.   

    试一试这个
    定义一个Filter来自动地实现字符编码的转化,然后再在xml文件中配置这个Filter具体实现如下: 
    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   SetCharacterEncodingFilter   implements   Filter   { public   void   destroy()   { this.encoding=null; 
    this.filterConfig=null; } public   void   doFilter(ServletRequest   request,   ServletResponse   response, 
    FilterChain   chain)   throws   IOException,   ServletException   { 
    //   选择使用的字符编码 
      if(ignore ¦ ¦(request.getCharacterEncoding()==null)) 
      { 
      String   encoding=selectEncoding(request); 
      if(encoding!=null) 
      { 
      request.setCharacterEncoding(encoding); 
      
      } 
      //将控制权交给下一个Filter 
      chain.doFilter(request,   response); 
      } 
      } 
    //将这个filter放置在服务中 
    public   void   init(FilterConfig   filterConfig)   throws   ServletException   { 
    this.encoding=filterConfig.getInitParameter( "encoding "); 
    String   value=filterConfig.getInitParameter( "ignore "); 
    if(value==null) 
    this.ignore=true; 
    else   if(value.equalsIgnoreCase( "true ")) 
    this.ignore=true; 
    else   if(value.equalsIgnoreCase( "yes ")) 
    this.ignore=true; 
    else   
    this.ignore=false; } 
    protected   String   selectEncoding(ServletRequest   request) 

    return(this.encoding); 

    protected   String   encoding=null; 
    protected   FilterConfig   filterConfig=null; 
    protected   boolean   ignore=true; } 
    xml配置如下: 
    <filter > 
    <filter-name >SetCharacterEncodingFilter </filter-name > 
    <filter-class >SetCharacterEncodingFilter </filter-class > 
    <init-param > 
    <param_name >encoding </param_name > 
    <param-value >utf-8 </param-value > 
    </init-param > 
    </filter > 
    <filter-mapping > 
    <filter-name >SetCharacterEncodingFilter </filter-name > 
    <url_pattern >/* </url_pattern > 
    </filter-mapping >
      

  5.   

    不是这些问题
    我试了好多次了.最后确定页面数据在被ActionForm包装的时候就转成乱码了.写了过滤器也一样的
    如果用html标签就没问题,ActioinForm不会包装成乱码
      

  6.   

    如果你使用过UFT-8的话,应该不会有问题的啊!你再试试
      

  7.   

    我的也是遇到同样的问题但是
    写个过滤器就好了,注意要在web.xml配置一下