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

报告相同问题?

悬赏问题

  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能
  • ¥15 jmeter脚本回放有的是对的有的是错的
  • ¥15 r语言蛋白组学相关问题
  • ¥15 Python时间序列如何拟合疏系数模型