這兩天接了一個網站,比較簡單兩三天就基本搞定了,但是其中碰到最難的就是flex的一個中文問題了,下面我主要想講講三種不同的現象。
- 第一種: Image組件的源地址是中文的,比如resources/數學/高等數學/math.jpg;
tomcat中的server.xml中配置端口的那段加上 URIEncoding="utf-8";
直接訪問資源地址如:http://localhost:8080/WebTest/resources/數學/高等數學/math.jpg;
這種情況下Image組件不能顯示出來,下面直接訪問的地址能訪問到數據。
- 第二種: Image組件的源地址是GBK的,比如比如resources/數學/高等數學/math.jpg;
tomcat中的server.xml中配置端口的那段加上 URIEncoding="GBK";
直接訪問資源地址如:http://localhost:8080/WebTest/resources/數學/高等數學/math.jpg;
這種情況下Image組件式能顯示出來的,但是直接訪問的那個地址是不能訪問到數據的。
- 第三種: mage組件的源地址是utf-8的,比如resources/%E6%95%B0%E5%AD%A6/%E9%AB%98%E7%AD%89%E6%95%B0%E5%AD%A6/math.jpg;
tomcat中的server.xml中配置端口的那段加上 URIEncoding="utf-8";
直接訪問資源地址如:http://localhost:8080/WebTest/resources/數學/高等數學/math.jpg;
這種情況下Image組件式能顯示出來的,直接訪問的那個地址是也能訪問到數據。
原因分析:
瀏覽器默認的編碼方式是utf-8的,flex中地址默認是采用utf-8的,而tomcat默認的編碼方式是ISO-8859-1的,即我們訪問的地址都是iso-8859-1編碼的,如果不設置tomcat中的編碼方式即為默認的iso-8859-1方式,那么瀏覽器中的請求地址中的中文是不能被解析的,所以請求不到資源,因此,我們通過設置tomcat的編碼方式為utf-8即可以通過瀏覽器訪問到含有中文名的資源。同理默認情況下flex組件也訪問不到帶有中文路徑的資源;
如果tomcat設置為utf-8的,我們可以訪問http://localhost:8088/EncodingTest/resource/未命名.jpg類似的地址,但是對于flex中<mx:Image source="resources/體育/足球/1.jpg" />這樣的組件還是顯示不出來(這點我也疑惑,還望高人指點),但是我們設置為<mx:Image source="resources/%E4%BD%93%E8%82%B2/%E8%B6%B3%E7%90%83/1.jpg" />這樣我們就能訪問到了。
如果tomcat編碼方式設置為GBK的話,對于flex組件<mx:Image source="resources/體育/足球/1.jpg" />我們是可以訪問到的,但是對于<mx:Image source="resources/%E4%BD%93%E8%82%B2/%E8%B6%B3%E7%90%83/1.jpg" />這樣的我們是訪問不到的,對于瀏覽器中的地址http://localhost:8088/EncodingTest/resource/未命名.jpg,我們是訪問不到的,但是對于我們把未命名進行GBK編碼之后的%CE%B4%C3%FC%C3%FB替換了,即http://localhost:8088/EncodingTest/resource/%CE%B4%C3%FC%C3%FB.jpg就能訪問了。至于如何取得中文的GBK編碼我們可以通過java方法取得,比如String s="未命名.jpg";s=java.net.URLEncoder.encode(s,"GBK");這樣就取得了“未命名.jpg”的GBK編碼了。
總結如下:
總結出了一個基本解決中文編碼的方法,即tomcat中設置編碼為utf-8,flex中組件要訪問資源的路徑如果帶有中文那么我們去把中文轉換成utf-8格式的在賦值給組件的source屬性,對于瀏覽器中訪問的地址就可以是帶有中文的訪問地址了。