とある用途のために、某サイトから自動でコンテンツを引っ張ってきて処理をするプログラムを書いている。
概要が、以下のとおり。
対象サイト:Windows上で動くウェブサーバ
当然ながら、コンテンツの記述は、"Shift_JIS"
処理プラットフォーム:CentOS(当然ながら、UTF-8環境)
開発言語:Perl 5.8.X
やりたいことは、対象サイトからコンテンツを引っ張ってきて、URLを切り出し、アンカーテキストとペアで、ローカルのDB(MySQL)に突っ込んで、あとから使いまわす、というよくある話。
問題は、URLに2バイトコードが入り込むこと。
まず、LWPでUserAgentを作ってコンテンツを引っ張ってくる。、当然、持ってきたものはUTF-8に変換する。
で、必要なテキストを切り刻んで、取り分ける。URLは、一旦SJISに戻して、URLエンコーディングして処理。アンカーテキストは、そのままUTF8として処理。
すると、生成された、「URLエンコーディングされたURL文字列」は、上記とは別に、該当サイトへウェブブラウザ上でアクセスする際に自動変換されて生成された「URLエンコーディングされた文字列」と差異が生じる。
結果、404エラーが返される。
ん?
URLエンコーディングするには、
SJIS文字列→URLエンコーディング文字列
UTF−8文字列→URLエンコーディング文字列
の2パターンがあるとして、得られるURLエンコーディング文字列は別物のはず。
でも、URLを指定するのに、そのサイトで用いられているエンコーディングを意識しないといけない、というのは、やっぱり正しくないような気がする。
うーん、わけわからん。
どっかに、スマートなソリューションないかな。
あと、巷でよくある、URLエンコーディングを行うためのコードとして、
$str =~ s/([^\w ])/'%' . unpack('H2',$1)/eg;
$str =~ tr/ /+/;
$str =~ s/([^\w \(\*\-\.\@\_\)])/'%' . unpack('H2',$1)/eg;
結成して約1年になる、うちのバンドですが、とうとう初ライブをしました。
(7月のは、あれはあくまで余興)

持ち時間45分でセットリストはこんな感じ(すべてオアシスのコピー)。
1. Rock 'n' Roll Star
2. The Hindu Times
3. Bring It On Down
4. I Hope, I Think, I Know
5. Some Might Say
6. Don't Look Back in Anger
7. Headshrinker
8. Stay Young
9. Roll With It
10. Fade Away
当然ながら、いろいろミスったところもあり、満足いく演奏ができた、なんてことは、ライブではありえないんですが、とても楽しかった。いやぁ、やっぱりライブっていいっす。
当日貴重な週末に足を運んでくれた方々、ライブ主催の皆さん、ホール関係者、バンドのメンバー、そして普段からバンド活動に協力いただいている、バンドメンバーそれぞれの家族の皆さんに感謝です。
ありがとうございました。