AS3でShift-JISのXMLを読み込むと、エラーになったりならなかったりする

as3で読み込むXMLは、Shift-JISにしないで、UTF-8にしたほうがいい。

おなじみ、System.useCodePage=trueで読み込めるのですが、
AS3だと、読み込むと、謎のゴミが文末にできて、(しかもできたりできなかったりする)
それがパーサエラーになる。
特に、複数読み込むと、本当ひどいありさま。
ググっても、あまりよい文献が出てこなかったので、まとめ。

SimpleXMLLoaderクラス

いきなり金字塔かと思いきや、ぼくの場合、古臭いXMLDocumentクラスを使っていたので、
読み込んだXMLをストリングに直して、またXMLDocumntをしてパースしなおすときに、
エラーこいてしまった。

ちなみにXMLDocumentクラスも使わない方がいい(使ってるのオレだけか)

XMLデータの末尾にゴミがついた時の対処法

これはすごく強引で、最後の閉じタグを検索して、そこの間だけを抜き取ってXML化する、というやりかた。
シンプルだけにわかりやすい。

で、さらにぼくの場合、複数のXMLを読み込んだ中身が混在しているといった事態が沖田総司。

XML1 <tree> ——–あーたらこーたら——————————-どーたら—–</tree>
XML2 <tree> ——–あーたらこーたら—————–</tree>

XML2を見ると、</tree>が2個入っているんである。つまり、
XML2 <tree> ——–あーたらこーたら—————–</tree>—-どーたら—–</tree>
となっていた。

てことで、

System.useCodePage = true;  
 
var urlLoader:URLLoader = new URLLoader(); 
urlLoader.addEventListener(Event.COMPLETE, loadCompleteHandler); 
urlLoader.load(new URLRequest(“ファイル名”)); 
 
var endTag:String = “一番最後の閉じタグ”; 
var xml:XML; 
function loadCompleteHandler(event:Event):void { 
    var data:String = event.target.data; 
    xml = new XML(data.substring( 0, data.IndexOf(endTag) + endTag.length));  
}

こうした。
これも対症療法だから、もうShift-JISはやめたほうがいいみたいですね。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です