wangyu1221 2011-05-24 23:08
浏览 218
已采纳

还是J2EE汉字乱码的问题,Filter不生效。

原来项目里只有hibernate,没有struts2和spring,用Filter处理汉字编码都正常,页面编码用的是GB18030,Filter的encoding也是GB18030。

但是最近打算引入struts和spring,发现编码的问题就出来了。不管用不用SetCharacterEncodingFilter,页面GB18030传进来的汉字在Action里面都是乱码,如果页面是utf-8就正常,也就是说SetCharacterEncodingFilter不生效。

如果是新工程那全部用UTF-8也无妨,但是原来的工程好多jsp,都从GB18030改成UTF-8工作量太大了。

请教解决办法!


刚刚试了下,如果页面和encoding都是GB18030,只有一种情况编码正常,就是在SetCharacterEncodingFilter设置编码的代码结束以后进入Struts2的拦截器之前的任何Filter里,request.getParameter("m")搞一下,到Action里就正常,没有这句就乱码,这个是什么原因?


解决了,在web.xml的org.apache.struts2.dispatcher.FilterDispatcher里给他指定编码就行了,貌似默认是按照UTF-8编码的。

分数给帮我解答上面这个问题的人,为什么在不指定FilterDispatcher的编码的时候,request.getParameter("m")搞一下也会正常?

  • 写回答

7条回答

  • greatrobert 2011-05-26 22:24
    关注

    另外org.apache.struts2.dispatcher.FilterDispatcher已经不推荐使用了,你已经是从很老的例子里面抄过来的,struts2的核心过滤器已经拆分成三个了org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter、org.apache.struts2.dispatcher.ng.filter.StrutsPrepareFilter、org.apache.struts2.dispatcher.ng.filter.StrutsExecuteFilter,FilterDispatcher相当于StrutsPrepareAndExecuteFilter,StrutsPrepareFilter主要用来封装参数给struts2的标签使用,StrutsExecuteFilter才是执行action的,有些页面没有经过action但是也使用了struts2的标签就可以使用StrutsPrepareFilter进行过滤

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(6条)

报告相同问题?

悬赏问题

  • ¥15 有赏,i卡绘世画不出
  • ¥15 如何用stata画出文献中常见的安慰剂检验图
  • ¥15 c语言链表结构体数据插入
  • ¥40 使用MATLAB解答线性代数问题
  • ¥15 COCOS的问题COCOS的问题
  • ¥15 FPGA-SRIO初始化失败
  • ¥15 MapReduce实现倒排索引失败
  • ¥15 ZABBIX6.0L连接数据库报错,如何解决?(操作系统-centos)
  • ¥15 找一位技术过硬的游戏pj程序员
  • ¥15 matlab生成电测深三层曲线模型代码