随笔-42  评论-578  文章-1  trackbacks-0
        近来,在开始做的NewsMS系统中,要整合Ajax,却发觉问题多多。最烦人的是中文乱码问题。以前,在纯Struts2+JSP时,是没有问题的,而一旦加入Ajax就不一样了(我用的JS库是Jquery)。弄了很长一段时间,还是解决不了。到网上找,有许多文章介绍的方法是:在Ajax中encode一次,而在服务器端decode一次,有的还夸张,要通过双重encode和decode来解决中文提交问题。这样方法应该可以解决问题的,但如果提交的表单字段比较多时,那不是要encode和decode许多次,那可能会使人崩溃掉。
       我的测试例子是表单提交的例子,分两种方案:一种是JSP直接提交给Struts,一种是JSP通过Ajax提交给Struts。
        在看本文前,大家应该知道的处理中文乱问题的方法:
        在Struts.xml中配置:
<constant name="struts.i18n.encoding" value="GBK"/>
        当然,我们过去也习惯设置JSP页面的编码为:
<%@ page language="java" contentType="text/html; charset=GBK"
    pageEncoding
="GBK"
%>

<meta http-equiv="Content-Type" content="text/html; charset=GBK">
        当然上面的GBK也可以是GB18030,GB2312。
        我们暂且把上面的两种的编码设置称为Struts端编码设置和JSP端编码设置。我们来开始我们的探索和测试吧!
1、Struts+JSP时,
    Struts设置成GBK,而而JSP端设置成GBK,GB2312,GB18030     --> 没问题
    Struts设置成GBK,而而JSP端设置成UTF-
8                    --> 乱码
    Struts设置成UTF-
8,而JSP端设置成GBK,GB2312,GB18030    --> 乱码
    Struts设置成UTF-
8,而JSP设置成UTF-8                   -->没问题
2、Struts+Ajax+JSP时,
    Struts设置成GBK,而而JSP设置成GBK,GB2312,GB18030    --> 乱码
    Struts设置成GBK,而而JSP设置成UTF-
8                    -->乱码
    Struts设置成UTF-
8,而JSP端GBK,GB2312,GB18030        --> 没问题
    Struts设置成UTF-
8,而JSP设置成UTF-8                   -->没问题

        看看我们的测试结果,想想,得出结论:
         结论一、如果Struts端设置为GBK,则它要求传进去的内容编码一定要是GBK或其它的国标编码;如果Struts端设置为UTF-8,则它也一定要求传进去的是UTF-8。
        结论二、JSP直接传给Struts和JSP通过Ajax传给Struts是不同的,Ajax的post方法(不推荐用get方法)默认传送的编码方式是UTF-8,而JS能自动把客户端的GB系列的编码转成UTF-8再发送(IE中是这样,其它浏览器不清楚)。这样一来,最终传给Struts端一定是UTF-8,而如果Struts端设置成GBK或其它的GB编码的话,就会出现乱码。
        所以,比较合理的编码设置是:Struts端和JSP端都统一设置成UTF-8。这对于Struts+JSP的整合方案和Struts+Ajax+JSP的整合方案都适用。



本文原创,转载请注明出处,谢谢!http://www.blogjava.net/rongxh7(心梦帆影JavaEE技术博客)
    

posted on 2009-04-09 13:38 心梦帆影 阅读(2638) 评论(4)  编辑  收藏 所属分类: Struts2.xJquery

评论:
# re: 也谈Struts+Ajax+JSP中的中文乱码问题[未登录] 2009-04-09 14:00 | jarry
如果没要求,通常都设置为UTF-8  回复  更多评论
  
# re: 也谈Struts+Ajax+JSP中的中文乱码问题 2009-04-09 23:59 | bera
从数据库到代码到配置文件到页面全部UTF8就完事了  回复  更多评论
  
# re: 也谈Struts+Ajax+JSP中的中文乱码问题 2009-04-23 17:47 | asda
asdasda  回复  更多评论
  
# re: 也谈Struts+Ajax+JSP中的中文乱码问题[未登录] 2009-08-02 12:45 | bill
我们都用utf-8,编码过滤可以用filter。  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: