2007年1月21日日曜日

IronPythonとElementTreeモジュール 2

FePyプロジェクトで提供しているElementTreeモジュールがIronPython 1.0.1でも使えることを前回に説明しましたが、日本語などの文字列をデコードしてくれないのはなぁと思っていて、いろいろと調べました。結局、pyexpat.pyの_parseメソッドには読み込み済みのデータが流れているので、ElementTreeモジュールを何とかしないといけないんです。
ElementTreeのコンストラクタを見るとopen関数でファイルを開いて、XMLの場合はXMLTreeBuilderモジュールで処理をしていました。ああ、open関数か...これを使っているとファイルのエンコードを判別してくれないんですね。さて、どうしたものでしょうねぇ。
XMLだけなら方法は無くないけど、HTMLとかも考えると。うーん。どうしたもんだろう。

結局はpyespat.pyの中でXML宣言のエンコーディングを取り出して、タグ名やらアトリビュート名、値を愚直にunicode関数で変換しました。encoding指定がない時は、デフォルトをUTF-8指定にしています。ネームスペースとかに日本語などを使わない限りは、大丈夫でしょう。
FePyプロジェクトがpyespat.pyモジュールを作成した理由は、CPythonだとxmlparserが提供されるけど、IronPythonでは提供されないという理由からのようです。

0 件のコメント: