2008年01月24日

swfmillでFlash Lite 1のswfを扱えるようにしてみた

register to: はてなブックマークに登録 | del.icio.usに登録 | この記事をクリップ!

Flashに関連するオープンソースなツールのひとつに、swfmillがあります。swfmillは、swfファイルを解析してxmlファイルに変換したり、逆にxmlからswfファイルを生成することができるツールです。swfmillの使い方についてはいろいろなところで紹介されているので、ここではFlash Lite 1.xのswfファイルをswfmillで扱うときの問題点について紹介したいと思います。


日本語を含むFlash Lite 1.xのswfファイルをswfmill swf2xmlしてみたところ、"error : xmlEncodeEntitiesReentrant : input not UTF-8"というエラーメッセージがでて、xmlファイルの出力が途中で止まりました。この問題を調べてみたところ、以下のようなことがわかりました。

swf内の文字コード

FlashはVersion 6からUnicodeに対応しました。Unicode対応前と対応後でswfファイル内の文字エンコードが異なり、対応前はcp932(日本語の場合)、対応後はUTF-8になります。

そして、Flash LiteとFlashのバージョン間対応ですが、Flash Lite 1.xはFlash 4がベースになっており、Flash Lite 2.xはFlash 7がベースになっています。なので、Flash Lite 1.xで日本語swfの中の文字コードはcp932、Flash Lite 2.x以降のswf内文字コードはUTF-8となります。

swfmillとlibxml2

swfmillは、xmlの生成やパースにlibxml2を利用しています。そして、libxml2のDOM Document Treeでは、文字列は必ずUTF-8を利用することになっており、xmlの生成やパースの段階でエンコーディング変換を行うようになっています。

しかし、swfmillはswf内の文字列をそのままDOM Document Treeに格納しています。そのため、Flash Lite 1.xの日本語swfを読み込ませると、Document Tree内にcp932の文字列が入り込み、libxml2がxmlの生成に失敗してしまいます。

対策

swf内の文字列をDOM Document Treeに登録する際に、cp932からUTF-8への文字コード変換を行うように修正すると、問題なくFlash Lite 1.1のswfファイルを扱えるようになりました。また、XMLから文字列を読み込むときにUTF-8からcp932に変換すると、xml2swfで元の文字列がきちんと再現されたswfファイルが生成されました。

せっかくなので、コマンドラインオプションで"-e cp932"のようにswf内文字コードを指定できるようにしてswfmillのメーリングリストにパッチを送ってみたところ、今は次のリリースに向けた作業で忙しいけど後で時間のあるときにレビューするよと返事がありました。そのパッチをここにも載せておきますので、興味のある方はお試し下さい。上手く動かないの等問題があれば、フィードバックを頂けると幸いです。

swfmillのswf内テキストエンコーディング指定オプション追加パッチ

パッチ適用とビルドの仕方

swfmill-0.2.12のソースコードをダウンロード&展開

$ wget http://swfmill.org/releases/swfmill-0.2.12.tar.gz
$ tar xzf swfmill-0.2.12.tar.gz
$ cd swfmill-0.2.12

patchをダウンロードして適用

$ wget http://lab.klab.org/files/flash/encoding.patch
$ patch -p1 < encoding.patch

ビルドとインストール。適切なconfigureのprefixオプション等は
環境に合わせて適切に設定してください。

$ configure
$ make
$ make install

klab_gijutsu2 at 19:12 │Comments(1)TrackBack(0)flash 
register to: はてなブックマークに登録 | del.icio.usに登録 | この記事をクリップ!

トラックバックURL

この記事へのコメント

1. Posted by わたなべ    2008年02月18日 01:05
5 ども。
トラックバックが弾かれちゃうので、コメントしてみました

この記事にコメントする

名前:
URL:
  情報を記憶: 評価: 顔   
 
 
 
最新記事
Archives
このブログについて
DSASとは、KLab が構築し運用しているコンテンツサービス用のLinuxベースのインフラです。現在3ヶ所のデータセンタにて構築し、運用していますが、我々はDSASをより使いやすく、より安全に、そしてより省力で運用できることを目指して、日々改良に勤しんでいます。
このブログでは、そんな DSAS で使っている技術の紹介や、実験してみた結果の報告、トラブルに巻き込まれた時の経験談など、広く深く、色々な話題を織りまぜて紹介していきたいと思います。

また、わたしたちが開発したソフトウエアやノウハウ、実験的なサービスを公開している、

もあわせてご覧いただければと思います。(DSASブログのエントリをシリーズ別に整理した「DSASブログまとめ」もあります)
KLabについて
KLab株式会社は、携帯電話の基盤技術から各種ソリューション、コンテンツ企画など多くのサービスを提供している会社です。
Blog内検索
QRコード
QRコード
最新コメント
最新トラックバック