ActionScript3でEUC-JPをUTF-8に変換する

FlashでWebページにアクセスしてテキストデータを取得して、それを文字列として自由に扱いたい場合のメモ。

何が問題になってくるかというと、取得するテキストデータの日本語文字コードがUTF-8じゃない場合です。
Shift_JISやEUC-JPで作成されたテキストデータを、どのようにしてUTF-8に変換してやるか。

いちおう、Flash(ActionScript3)にも、URLStreamなどのクラスにreadMultiByteというメソッドが用意されていて、これを用いることでUTF-8じゃない日本語文字コードで作成されたテキストデータをUTF-8に変換して読み取ることができます。
本来ならこれで解決なのですが、現時点で、このreadMultiByteにはバグがあるらしく、EUC-JPを正しく処理することができません。
Shift_JISは大丈夫なんですけどね。

なので、テキストデータがEUC-JPの場合にどうするか、という話です。
どうしようもないので、EUC-JPをUTF-8に変換する処理を自前で作ることにしました。
作成するにあたって、AOK’s JavaScript Libraryを大いに参考にさせて頂きました。
ありがとうございます。

それで出来上がったコードがJcode.asです。
Jcodeクラスは以下のように使用します。

// Webページにアクセス
var stream:URLStream = new URLStream();
var request:URLRequest = new URLRequest("http://............");
stream.addEventListener(Event.COMPLETE, streamComplete);

function streamComplete(e:Event):void {
    // ByteArrayに読み込む
    var stream:URLStream = URLStream(e.currentTarget);
    var bytes:ByteArray = new ByteArray();
    stream.readBytes(bytes, 0, stream.bytesAvailable);

    // ECU-JPをUTF-8に変換して読み取る
    var str:String = Jcode.EUCtoUTF8(bytes);
}

本来なら、文字コードを判定する機能などもあったほうがいいのでしょうが、ぼく個人的にはこの機能だけあれば事足りるので、実装していません。
なので皆さん自由にカスタマイズしてご使用ください。

※追記。

AIR1.1にバージョンアップしたら、readMultiByteのバグが修正されたようで、EUC-JPも問題なく処理できるみたいです。
数日の差で、無駄な労力を使ってしまった・・・。

Leave a Reply