Actionscript 3.0 の文字コード検知クラスを作成してみました。
ファイルはここにおいています。
http://www.hi-farm.net/aslib/detect.lzh
このクラスが何をするための物かと言えば、
文字コードを検知するものです。
ファイルをswfに取り込む時に、文字コードをutf-8に変換するものは、URLStreamのreadMultiByteメソッドがあるのですが、例えば、読み込むファイルの文字コードがランダムで指定できない場合、文字コードを検知するのが面倒でした。
そんな面倒なことはやりたくない!ということで、読み込もうとする文字コードの種類を検知するクラスを作成してみました。
簡単に言えば、
URLStreamを使ってファイルを読み込む場合:DetectOnWebクラス
FileStreamを使う場合:DetectOnAirクラス
を使って下さい。
言い直すと、
web上にあるファイルを調べる場合:DetectOnWebクラス
AIRを使ってローカルファイルを調べる場合:DetectOnAirクラス
ということです。
使い方は、
1 インポートする
2 インスタンス作成する
3 リスナー設定する
4 detectCharset(読み込むファイルのURL:String);
5 リスナーで答えを取得
という流れです。
例としてはこんな感じです。
DetectOnAirクラス:
<?xml version=”1.0″ encoding=”utf-8″?>
<mx:WindowedApplication xmlns:mx=”http://www.adobe.com/2006/mxml”; layout=”absolute” creationComplete=”initApp()”>
<mx:Script>
<![CDATA[
import net.hifarm.encode.DetectOnAir;
private var detect:DetectOnAir;
private function initApp():void{
detect = new DetectOnAir();
detect.addEventListener(“completeData”, comp);
//下のはローカルファイルのURL表現の例です。 detect.detectCharset(“file:///Users/mmlemon/Documents/Flex%20Builder%20Moxie/indexInPDF/shift-jis.txt”;);
}
private function comp(e:Event):void{
trace(detect.result);
}
]]>
</mx:Script>
</mx:WindowedApplication>
DetectOnWebクラス:
<?xml version=”1.0″ encoding=”utf-8″?>
<mx:Application xmlns:mx=”http://www.adobe.com/2006/mxml”; layout=”absolute” creationComplete=”initApp()”>
<mx:Script>
<![CDATA[
import net.hifarm.encode.DetectOnWeb;
private var detect:DetectOnWeb;
private function initApp():void{
detect = new DetectOnWeb();
detect.addEventListener(“completeData”, comp);
detect.detectCharset(“http://blog.hi-farm.net/”;);
}
private function comp(e:Event):void{
trace(detect.result);
}
]]>
</mx:Script>
</mx:Application>
すると、いずれも『detect.result』というところに結果が反映されます。具体的には、
“iso-2022-jp” , “euc-jp” , “utf-8” , “shift-jis” , “iso-8859-2”
です。ちなみに、エラーが発生した場合、エラーメッセージがdetect.resultに返されます。
iso-8859-2は、iso-2022-jp、euc-jp、utf-8、shift-jisに当てはまらない結果が出た場合に示されます。
注意点:
現在は日本語しか判別できません。
韓国語や中国語の判定はできないのであしからず。
まだ作ったばかりで間もないため、不具合やエラーがあるかもしれません。
その場合、メールいただけると幸いです。
2007年9月26日01:08