2005/03/24

 

[Projects::Memo] mmtoday修正報告

 MM/Memoの配信するRSSからblosxomのエントリを一日単位で作成するプラグイン mmtoday の修正を行いました。
 →mmtodayプラグイン(05/03/24版)

 3/23くらいからプラグインが正常に動いておらず、どうしたものかと思って調べてみたのですが、原因はXML::RSSのパース部分だった模様。以下ドキュメント。

 MM/Memoが配信しているRSSの文字コードはEUC-JPなのですが、XML::RSSモジュールで処理を行うため、内部的に一度UTF-8に変換しています。
 その時に、XMLのエンコード宣言の部分を、EUCからUTF-8に書き換えてます。具体的にはこんなコード:

$content = decode("euc-jp", $content);
$content =~ s/<\?xml version="1.0" encoding="euc-jp" \?>/<\?xml version="1.0" encoding="utf-8" \?>/;

 判りやすいですね。
 それで今回の不具合の原因ですが、MM/MemoのRSSに書かれたエンコード名がいつの間にか euc-jp(小文字)から EUC-JP(大文字)に変わっており、「上記の書き換え処理が失敗→encoding="EUC-JP"と書かれたUTF-8形式のファイルをXML::RSSに食わせることに→(゚д゚)マズー」となっていたのが原因でした。

今回の対策:
 エンコード宣言の書き換え部分を、

$content =~ s/<\?xml version="1.0" encoding="EUC-JP" \?>/<\?xml version="1.0" encoding="utf-8" \?>/;

 とすることで対応。
 判りやすいですね(職業プログラマとしてこんな場当たり対処でいいのか自問しつつ)。

Posted at 00:00 | WriteBacks (2) | permalink
WriteBacks

プロログ置換

$content =~ s/<\?xml.*?\?>/<\?xml version="1.0" encoding="UTF-8"\?>/;
こうやってたりする。

Posted by kyo at 2005/03/24 (Thu) 15:37:19

kyoさんのがスマートですが

修飾子の i を使って、大文字小文字を区別しないようにするという手もありますよ〓。

Posted by 海賊たろ at 2005/03/24 (Thu) 17:53:52
TrackBack ping me at
http://fukaz55.main.jp/projects/mm/mmtoday_update.trackback
Post a comment

writeback message: Ready to post a comment.















Syndicate this site (XML)  Subscribe with Bloglines  Subscribe with livedoor Reader    blosxom 2.0.2