Plagger を利用して、Hatena から Delicious, LivedoorClip に同期してるんだが、2ヶ月ほど前からこんな感じで文字化けするようになってた。
2ヶ月以上も放置してて、otsune さんからも IRC でつっこまれたので、ちょっと調べてみることに。タイミングとしては、XML::Feed::RSS かなにかが XML::Feed::Entry::Format::RSS とかに変わったあたりなんだけど、そのとき cpan モジュール沢山更新したから、あんまり関係ないのかも。
で、とりあえず試行錯誤でかろうじてわかったのは、Publish::Delicious.pm の場合、
my $params = {
url => $args->{entry}->link,
description => encode('utf-8', $args->{entry}->title),
tags => encode('utf-8', $tag_string),
};
の部分の、encode をはずすと文字化けしなくなるってこと。Publish::LivedoorClip も同じ。
デバッグしてみても、「utf8::is_utf8($args->{entry}->title->data)」は 1 だし、encode した文字列はちゃんとフラグ落ちてたんだけど、なんでだろう。perl の仕組みも文字列の扱いも詳しくないからこれ以上わからない。
というわけで、とりあえず以下のようなパッチを宛てて文字化け回避したのはいいけど、ちょっと場当たり的。LivedoorClip も似たような感じ。
--- a/plagger/lib/Plagger/Plugin/Publish/Delicious.pm
+++ b/plagger/lib/Plagger/Plugin/Publish/Delicious.pm
@@ -32,12 +32,16 @@ sub add_entry {
my $params = {
url => $args->{entry}->link,
# description => encode('utf-8', $args->{entry}->title),
# tags => encode('utf-8', $tag_string),
description => $args->{entry}->title,
tags => $tag_string,
};
ついでに、Hatenaブックマークのフィードは、何故か entry_body にブクマした記事の概要が入ってて、summary のほうに自分のコメントが入ってるので、
$params->{extended} = $args->{entry}->body_text;
のところは、
$params->{extended} = $args->{entry}->summary;
に変えてしまった。
うーん。謎いです!
環境
- Perl v5.8.8 built for i386-freebsd-64int
- Encode 2.27
- URI::Fetch 0.08
- WWW::Mechanize 1.54
- Net::Delicious 1.13
主要なのはこんな感じ?
似たような状況に陥ってる人はおらんのかな。