在Flash MX的時候開始,就經(jīng)常有人問為什么Flash載入的中文會是亂碼?
后來大家都用了System.useCodePage=true;去解決這個問題。 可能大家都已經(jīng)習慣了在Flash 5或以前,F(xiàn)lash完全沒有理會編碼時候吧。 大家都可能覺得,我在Flash5的時候可以很容易的載入外部文本,可以很容易的跟PHP, ASP等等的后臺程序作信息交互。但是到了Flash MX的時候,同樣的方法卻出現(xiàn)了亂碼。一定要在前面加上System.useCodePage=true;才可以解決問題。
大家可能都會覺得這是Flash的問題,覺得Flash MX的中文支持能力差了。但是,事實卻剛剛相反。Flash MX, Flash 2004這些版本對編碼的支持絕對是比Flash5好的。(廢話,F(xiàn)lash5都沒有任何編碼的問題)大家可能對我的話有所懷疑,這不要緊,下面就讓我說明一下吧。
大家都知道我們國家就已經(jīng)有兩種不同的編碼了,分別是香港,臺灣的BIG5和我們內地的GB2312。在Flash 5或以前,F(xiàn)lash完全沒有理會編碼問題,所有在Dynamic/Input Textfield顯示的中文字,F(xiàn)lash是根據(jù)瀏覽者系統(tǒng)預設編碼去顯示。香港一般用Big5去編碼文字,而大部分人都是用繁體中文Windows,所以一拍即合,可以顯示到中文。對于英文或簡體中文Windows瀏覽者,他們就無法顯示到Dynamic/Input Textfield上的Big5編碼繁體中文。以前的英文Windows用戶,經(jīng)常要靠外掛中文程式,例如:南極星或Richwin看中文網(wǎng)頁,可惜這類軟件對Flash里的中文字無法起作用,依舊是亂碼。
但是從Flash MX開始,F(xiàn)lash就開始支持Unicode編碼。
Unicode
Unicode能夠支持多國不同文字在同一套編碼架構中,所以能夠在同一篇文章中,同時顯示繁簡體中文字和其他文字。Flash 6(Flash MX)開始支持Unicode,并將Flash Player 6或以上預設編碼為Unicode(如果播放Flash 5的SWF就仍然是根據(jù)瀏覽者系統(tǒng)預設編碼去顯示),新手不知道這轉變,動態(tài)載入外部檔案,例如:
loadVariablesNum("text.txt", 0);
text.txt這檔案里的中文用Big5編碼,F(xiàn)lash Player 6則用Unicode,結果當然是顯示亂碼。
解決方法有兩個: 一 強迫Flash使用“Flash 5原來編碼方法”,在Frame 1加入指令: System.useCodepage = true; 如果整個SWF都是使用“Flash 5原來編碼方法”,就只需在Frame 1開始加一次便可。
二 使用unicode編碼
服務端編程: 1.PHP/ColdFusion的開發(fā)者 請把你的PHP/ColdFusion存為UTF-8編碼。 文本:文件->另存為->編碼->UTF-8 DW2K4:File->New->Preference...->Default encoding->UTF-8 演示地址: al4u.51.net/test.php
2.ASP的開發(fā)者 請把你的ASP存為UTF-8編碼。 文本:文件->另存為->編碼->UTF-8 DW2K4:File->New->Preference...->Default encoding->UTF-8 然后在頂上多加 <%@ codepage=65001 %> 就可以了 演示: asp3.6to23.com/littlejie/test.asp
在Flash里面請別加入 System.userCodePage=true;
加了這指令之后,F(xiàn)lash對Unicode的文件將會顯示為亂碼。也就是說,你不能用Unicode編碼了。如果不用utf-8編碼,對于gb2312編碼來說,是可以部分兼容繁體中文和一些日文編碼的, 那是因為gb2312里面已經(jīng)包括了這些編碼,即所謂的gbk大字符集。這就讓很多使用System.userCodePage的人覺得只要默認編碼為gb2312,就可以做到解決編碼問題。我在原先做的時候也是這樣誤解的,那是因為我沒有測試別的語言,比如韓文。后來試了韓文之后,發(fā)現(xiàn)輸入到數(shù)據(jù)庫中的文字都變成了%#5234;%#1243;這樣子的亂碼。原來這些特殊語言的編碼在gb2312里找不到,所以就被轉成了字節(jié)編碼。
所以,如果你只是想讓繁體和簡體之間沒有編碼問題,那只需使用gb2312編碼就足夠了,ie會幫你轉換big5到gb2312。而如果要適應更多語言的瀏覽器,那么,你就必須使用萬國碼unicode。不過值得注意的是, 某些數(shù)據(jù)庫不支持unicode。比如早些的mysql,現(xiàn)在的mysql已經(jīng)支持了。這就需要強行轉換編碼,可以使用urlencode編碼,或者base64也行。讀取的時候再反編碼回unicode。還有要注意的地方, 就是flash里面的文本框字體不能再用宋體了。而是需要用公用字體,比如Arial。 因為別的語言并沒有宋體
特別鳴謝:在在,luar兩位大哥.
點擊這里參加討論
出處:藍色理想
責任編輯:qhwa
◎進入論壇Flash專欄版塊參加討論
|