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も問題なく処理できるみたいです。
数日の差で、無駄な労力を使ってしまった・・・。
Filed under: Flash/AIR



