您的位置:首页 > 编程语言 > Java开发

java与flex交互时的乱码问题如何处理

2013-08-25 19:10 531 查看
最近自己在做一个FLEX+JAVA的项目时,希望能通过Httpservice进行前后台数据交互,以达到后台能同时支持多UI终端的系统。

但却参数传递时的中文乱码问题困扰了好久。在网上找了一大堆资料,但大多都讲的不具体,最终无奈只好自己去研究这个问题的解决之道了。

在这里把自己的研究结果与各位一起分享下,共同探讨下,相互交流,若有不对之处,希望同仁们能指正。

在解决这个问题前,首先我们需要搞清楚以下几个问题:

(1)中文参数在传递时为什么会出现乱码?

要搞清楚这个问题,首先需要弄明白 flex------> java 参数传递时的流程 即 flex -----> tomcat -------> java

搞明白上面这个流程后,那我们首先需要检查以下几个配置:

1)你的 flash builder工具 和eclipse 的项目编码格式是否都已设置成了 UTF-8

2)你的tomcat的http传输的编码格式是否设置成了 UTF-8

因为在FLEX传递参数到java后台时,会将中文参数以flash builder工具的编码格式进行一次转换,然后经由tomcat时,会再转换成tomcat的编码格式;最后传递到java后台,以java的默认编码格式进行一次转换,如果这三方的编码格式不统一的话,那就会出现令人头疼的乱码了。

那应该如何解决这个问题呢,在这里提供两种方式:

1)将三方的编码格式进行统一。

修改flash builder工具的编码格式(这个比较简单,就不作细述了)

修改 tomcat的默认编码格式: 找到tomcat的server.xml文件:apache-tomcat-6.0.32\conf\server.xml,修改方法:



修改eclipse工具的默认编码格式: 点击项目,右键------>properties -------> resource ------->TextFileEncoding



设置完成后,当flex传递参数到java后台时,将始终会以UTF-8的格式进行编码了。

重启下tomcat,看看前端到后台的乱码问题是否已经解决了_~_。

第二种解决办法:

如果大家的tomcat中不只有一个服务,那如果贸然修改tomcat的编码可能会引起其他项目的乱码问题,那又该如何解决呢?

这个也很简单,首先还是要牢记flex到java参数传递的顺序。只要我们将发送方flex和接收方java的编码格式统一了,即使中间tomcat的编码格式不一样,那也没关系。

分二步完成:

1)将flex的编码格式先改成UTF-8,同时,将请求的URL地址以 encodeURI(url) 进行转码,以确保URL的编码格式是 :UTF-8

2)在java后台接收参数时,将参数转码成UTF-8,即: new String(param.getBytes("ISO8859-1"),"UTF-8"),在getBytes()方法中添加“ISO8859-1”编码格式原因是:tomcat在不设置编码格式时,它的默认编码格式就是:ISO8859-1,

这样,从前端传到后台时,编码格式的转换过程就是: FLEX(UTF-8) ----> tomcat(ISO8859-1)----> JAVA(UTF-8),这样一来,编码格式又被转回来了。

JAVA 到 FLEX中文参数传递乱码问题又该如何解决呢?

在这里,本人没想到比较好的办法。只找到了一种解决办法,即在修改tomcat编码格式的情况下,只需要在FLEX端接收中文参数时,通过HTTPService 传递参数时,设置 System.useCodePage = true; 即编码格式强制由传统代码页来解析。这样乱码问题就解决了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: