|
XML::TreePP モジュールで、Perl オブジェクト→XML ファイル出力を行う writefile() メソッドで文字化けが発生していました。 先週末にアップした、バージョン 0.31 で修正されています。 writefile() メソッドをご利用の方は、バージョンアップをお願いします。_o_ http://www.kawa.net/works/perl/treepp/treepp.html 原因は、utf8 フラグの扱い。 0.22 から、utf8_flag => 1 というオプションを追加したのだけど、 writefile 時の処理に問題が残っていました。 XML::TreePP モジュールの utf8 フラグ取り扱い方針は、以下の通り: use utf8; あり + utf8_flag => 1 ⇒ utf8フラグを立ったまま出力 use utf8; あり + utf8_flag => undef ⇒ スルー(utf8フラグは立ったまま) use utf8; なし + utf8_flag => 1 ⇒ utf8フラグを立てて出力 use utf8; なし + utf8_flag => undef ⇒ スルー(utf8フラグは立ってないまま) writefile() メソッド自体は処理が短く、またファイル書き出しが伴う面倒もあり、 ちゃんとテストを組んでいなかったのが、バグの発見が遅れた原因。 追加しておきました。やっぱり、テスト大事ですね。申し訳ないです。。。 http://www.kawa.net/works/perl/treepp/temp/41_writefile_encode.t #ただし、CPAN 上のパッケージには 41_writefile_encode.t は未同梱です。 #次回のバージョンアップ時に同梱しておきます。 #みるふぃーゆさん、ご指摘ありがとうございました! なお、このバージョン 0.31 では、合わせて、先週話題になっていた CDATA セクション内に ]]> の件にも対応しています。 CDATA セクション中に ]]> という文字列を書きたい場合は、 <![CDATA[]]]]><![CDATA[>]]> または <![CDATA[]]]><![CDATA[]>]]> と分割する必要がある。読みにくいけど。 0.31 以前でもこのような複数の CDATA で構成される要素を含む XML の読み込み処理には 対応していましたが、0.31 からは、書き出し処理にも対応しました。 書き出し時は、自動的に分割します。(こちらのテストは同梱してあります) 仕様書は、http://www.w3.org/TR/REC-xml/#sec-cdata-sectを参照: [18] CDSect ::= CDStart CData CDEnd ポイントは、[20] で ']]>' が抜かれている点と、 [43] で CDSect が * なので、つまり要素中に CDATA が何回登場してもOKという点。 ふつうのテキスト、CDATA、コメントが何回混ざってもOKなんですね。 |
| << 前記事(2007/09/19) | トップへ | 後記事(2007/10/08)>> |
| タイトル (本文) | ブログ名/日時 |
|---|
| 内 容 | ニックネーム/日時 |
|---|---|
快適なパソコンにしたいですね |
長田ドーム 2007/10/06 12:50 |
| << 前記事(2007/09/19) | トップへ | 後記事(2007/10/08)>> |