[Air/Flex]UTF-8以外のエンコーディングを扱う
6月6日はドラえもんの日だと個人的に思っています。
AirやFlexで扱うことができるエンコーディングは、デフォルトではUTF-8ですが、サーバ側のシステムの都合などで、UTF-8以外のエンコーディングを扱う必要が出てくる場合があります。
サーバ側から返されるデータのエンコーディングがShift-JISで固定であれば、サーバからデータを取得する前に、以下の一行を追加するだけで、Shift-JISのデータを文字化けすることなく扱うことができます。
System.useCodePage = true;
これはFlashでは常識らしいのですが、これを知らなかったばかりに、ゴールデンウィークの貴重な二日間を無駄に費やしたバカが誰なのかについては、本人の名誉のためにここでは伏せることにして、それではUTF-8でもShift-JISでもないエンコーディングを扱う場合はどうすればいいのかというと...
(だいぶ端折ってますので各自で適宜補足してください)
var req:URLRequest = new URLRequest("http://www.hoge.com/foo.xml");
var loader:URLLoader = new URLLoader();
loader.dataFormat = URLLoaderDataFormat.BINARY;
loader.addEventListener(Event.COMPLETE,function(event:Event):void{
var loader:URLLoader = event.target as URLLoader;
var byteArray:ByteArray = loader.data;
var data:String = byteArray.readMultiByte(byteArray.length,"shift_jis");
});
loader.load(req);
まずURLLoaderクラスのdataFormatプロパティにURLLoaderDataFormat.BINARYをセットして、サーバからのレスポンスをバイナリデータとして受け取るように設定します。次に、受信したデータをByteArrayとして受け取り、readMultiByteメソッドの第二引数でエンコーディングを指定してUTF-8の文字列に変換します。
Flex3でreadMultiByteの第二引数として指定可能なエンコーディングの一覧は、こちらのページで参照できます。
トラックバック(0)
このブログ記事を参照しているブログ一覧: [Air/Flex]UTF-8以外のエンコーディングを扱う
このブログ記事に対するトラックバックURL: http://ushi.donburi.net/mt/mt-tb.cgi/17



コメントする