1. 程式人生 > >java與flex互動時的亂碼問題如何處理

java與flex互動時的亂碼問題如何處理

最近自己在做一個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; 即編碼格式強制由傳統內碼表來解析。這樣亂碼問題就解決了。