使用Flex(和HTTPService),我從URL加載數據,使用GBK字符集編碼數據。這種URL的一個很好的例子是this one。AS3:轉換爲GBK字符集
瀏覽器得到數據在GBK字符集中,並正確顯示使用中文字符的文本出現的位置。然而,Flex的將持有的數據在不同的字符集,這恰好是這樣的:
({"q":"tes","p":false,"bs":"","s":["ÌØ˹À","ÌØÊâ·ûºÅ","test","ÌØÊâÉí·Ý","tesco","ÌØ˹ÀÆû³µ","ÌØÊÓÍø","ÌØÊâ·ûºÅͼ°¸´óȫ","testin","ÌØ˹ÀÆ۸ñ"]});
我需要正確地更改文本,以相同的字符串,該瀏覽器中顯示。 什麼我已經用做的是使用ByteArray的,最好的結果又「ISO-8859-1」:
var convert:String;
var byte:ByteArray = new ByteArray();
byte.writeMultiByte(event.result as String, "iso-8859-1");
byte.position = 0;
convert = byte.readMultiByte(byte.bytesAvailable, "gbk");
這產生了下面的字符串,這是非常接近的瀏覽器的結果,但不完全:
({"q":"tes","p":false,"bs":"","s":["特?拉","特殊符號","test","特殊身份","tesco","特?拉汽車","特視網","特殊符號?案大?","testin","特?拉????]});
某些字符仍然被「?」替換。分數。當我將瀏覽器結果複製到Flex並打印出來時,它會正確顯示,因此它不是Flash跟蹤中不支持的字符或類似的東西。
有趣的事實:Notepad ++提供了與Flex中的bytearray方法相同的close-but-not-quite結果。此外,在NP ++,將正確/預期的字符串時,從GBK到ISO-8859-1,我得到一個稍微不同的字符串比一個Flex是從網址獲得:
({"q":"tes","p":false,"bs":"","s":["ÌØ˹À","ÌØÊâ·ûºÅ","test","ÌØÊâÉí·Ý","tesco","ÌØ˹ÀÆû³µ","ÌØÊÓÍø","ÌØÊâ·ûºÅͼ°¸´óÈ«","testin","ÌØ˹ÀÆû³µ¼Û¸ñ"]});
在我看來,這字符串是Flex 應該得到的字符串,以使ByteArray方法創建正確的結果(在瀏覽器中可見)。因此,我認爲可能3個原因是:
- 又出事了從URL到Flex的未來數據,使其略有不同(不太可能)
- 接收到的字符集是不實際ISO-8859- 1,但另一個類似的字符集
- 我沒有完全掌握編碼和字符集之間的區別,所以也許這讓我無法理解問題。
任何幫助/想法將不勝感激。 謝謝。