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条)

报告相同问题?

悬赏问题

  • ¥50 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥200 uniapp长期运行卡死问题解决
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?