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
http://fukaz55.main.jp/projects/mm/mmtoday_update.trackback
writeback message: Ready to post a comment.