您的位置:首页 > 其它

Flex读取非UTF-8中文数据乱码问题的解决方案

2014-08-27 07:31 393 查看


文章转自:http://www.cnblogs.com/AndySong/archive/2009/05/13/1456161.html

Flex应用中经常要读取外部数据,一般情况下,对于读取编码是UTF-8的数据不会有什么问题,因为在Flex中默认的编码就是UTF-8。但遇到读取非UTF-8的数据时,会出现乱码的情况。这个时候需要对读取的内容进行一次转换,以便得到正确的显示。

下面这个例子将会提供一种转换的方法。

先来看代码:

   <?xml version=“1.0“ encoding=“utf-8“?>

   <!–

   /**********************************************************

   * Copyright (C) 2009, DiaboLab.com, All Rights Reserved

   * Name        : Character Demo

   * Author    : DiaboLab.com

   * EMail    : guestsnowl@163.com

   * Created Date    : 01/15/2009

   * Updated Date    :

   * Description    : Flex应用中读取外部中文数据乱码的解决方案

   **********************************************************/

   –>

   <mx:Application xmlns:mx=“http://www.adobe.com/2006/mxml“ 

           width=“480“ height=“280“>

       <mx:Style>

           Application{

               fontSize: 12pt;

           }

       </mx:Style>

       <mx:Script>

           <![CDATA[

               private var utf8URL:String = "http://www.diabolab.com/demos/character/utf8.txt";

               private var gbURL:String = "http://www.diabolab.com/demos/character/gb2312.txt";

                //使用默认方式读取UTF-8的数据

                private function loadUTF8():void

                {

                    var request:URLRequest = new URLRequest(utf8URL);

                    var loader:URLLoader = new URLLoader();

                    loader.addEventListener(Event.COMPLETE, onLoadUTF8);

                    loader.load(request);

                }

                //直接将读取内容输出到文本框中,没有问题

                private function onLoadUTF8(e:Event):void

                {               

                    ta.text += "默认读取UTF-8数据:\n"+e.currentTarget.data.toString()+"\n";

                }

                //使用默认方式读取GB的数据

                private function loadGB():void

                {

                    var request:URLRequest = new URLRequest(gbURL);

                    var loader:URLLoader = new URLLoader();

                    loader.addEventListener(Event.COMPLETE, onLoadGB);

                    loader.load(request);

                }

                //直接将读取内容输出到文本框中,会发现出现乱码

                private function onLoadGB(e:Event):void

                {               

                    ta.text += "\n默认读取GB数据:\n"+e.currentTarget.data.toString()+"\n";

                }

                //使用URLStream取代URLLoader来读取GB数据

                private function loadGBTrans():void

                {

                    var request:URLRequest = new URLRequest(gbURL);

                    var loader:URLStream = new URLStream();

                    loader.addEventListener(Event.COMPLETE, onloadGBTrans);

                    loader.load(request);

                }

               //将读取的内容进行转换后输出,GB的数据被正确显示

               private function onloadGBTrans(e:Event):void

               {

                   var stream:URLStream = e.currentTarget as URLStream;           

                   var result:String = stream.readMultiByte(stream.bytesAvailable, "gb2312");

                   ta.text += "\n转换读取GB数据:\n"+result+"\n";

               }

           ]]>

       </mx:Script>

       <mx:Panel title=“读取中文资源“ layout=“vertical“ width=“100%“ height=“100%“ 

               paddingLeft=“3“ paddingRight=“3“ paddingTop=“3“ paddingBottom=“3“>

           <mx:HBox>

               <mx:Button label=“默认读取UTF-8数据“ click=“loadUTF8()“/>

               <mx:Button label=“默认读取GB数据“ click=“loadGB()“/>           

               <mx:Button label=“转换读取GB数据“ click=“loadGBTrans()“/>

           </mx:HBox>

           <mx:TextArea id=“ta“ width=“100%“ height=“100%“ editable=“false“/>

       </mx:Panel>

   </mx:Application>


uft8.txt是一个以UTF-8编码的中文文件。

gb2312.txt是一个以GB编码的中文文件。

这里只是使用txt文件作为例子,xml等文件格式是一样的。

使用URLLoader读取外部数据,在遇到中文非UTF-8编码的数据时出现乱码显示。

使用URLStream代替URLLoader后,在完成读取后使用readMultiByte()方法进行编码转换,就可以得到正确的显示。


上面的例子编译运行例子:http://ria.args.cn/uploads/2009/02/charactertest.swf
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐