「AS3のShift_JISのXML読み込みにバグ」という問題でかなりハマったので、メモのためのエントリです。
Shift_JISのXML読み込みで問題発生
『AS3でShift_JISのXMLを読み込む』という話があった時点で、「え!?Shift_JIS?なんか怖いので、UTF-8にしてください」と野生の勘で言ったものの、根拠がなくて却下されていました。
で、開発終盤。
なぜだかうまく読み込めない、という問題が大きな問題となりつつあり、当初は通信ラグとかサーバ側がおかしいんじゃないのか?とかそういう感じで調査していたのですが、調べていくと、「AS3でShift_JISの大きなサイズのXMLを読み込むとうまく読み込めないことが発生する」というバグ情報にたどり着きました。
野生の勘は的中でした。
21世紀も1割過ぎたんだから、もう新規案件の通信時文字コードはUTF-8で統一しようよ、と心の底から思います。
Shift_JISのXMLを問題なく読み込む方法
さらに調べると、どうやら回避策があるということがわかり、具体的には下記のブログエントリを参考に回避することが出きました。
内容を説明すると、バイナリフォーマットで通信し、それをByteArray→UTF-8の解釈でStringに変換→XMLという流れで解釈してあげれば問題ない模様。
// ロード開始コード. var _loader:URLLoader = new URLLoader(); _loader.dataForamt = URLLoaderDataFormat.BINARY; // ←ここが重要. _loader.addEventListener( Event.COMPLETE, onLoadComplete ); _loader.load(new URLRequest( _path_to_load_ ));
// ロード完了後の処理. var bytes:ByteArray = ByteArray( _loader.data ); // 型キャスト. var xml:XML = new XML( byteData.readMultiByte( bytes.length, "shift-jis" ) );
この流れでうまく行くというのは、おそらく、自動でXMLに変換するときに文字コード判定がバグってしまう、ということなんだと思います。
[AD]
↓ヘッドフォン入出力の分岐用に欲しい。というか、ミキシングできるらしく試してみたい。
↓フタ付き小物入れ部分が魅力的だったりするUSBハブ。箱の中にも端子があったら最高だった。






