お約束です(笑)
perl5.8 をやったら、必ずと言ってよいほど、 文字コード周りで一度はハマるでしょう。 抜けるのに2日弱かかってしまいましたよ。 perl は 5.8 から、文字コード周りの扱いががっつり変わりました。 5.6 時代のものなんて、そのままでは上手く動くかどうかわかりません。 まして 5.005 とか、jperl なんてのは、更に怪しいです。 どう変わったかと言うと、UNICODE の扱いが正しく実装されました。 まぁ、私たちのような多バイト文字圏のユーザには、 しち面倒くさい設定が必要になるという意味です。 そのため、入出力ストリームの文字コードを指定してやる必要があります。 Java みたいっすねぇ。 Java でもこのあたりは相当悩まされましたが。 ノウハウが溜まって慣れれてしまえば、全く問題ではないのですけれど、 自分なりのノウハウを溜めるまでが、試行錯誤なんですよねぇ。 作りたいものは、RSS の解析&データベースへの投入なので、 1日で終わると高を括っていたら、エライ目に遭いました(^^;; 実際、多分 perl5.6 だったら、半日もせずに終わったでしょうけれど…。 RSS のパージングは簡単です。 最初 XML::DOM を使おうと思っていたのですが、 XML::RSS というのがあるそうなので、そっちを使うことにしました。 apt でもインストールできましたし(libxml-rss-perl)、 ツリー構造なので、直感的な操作ができます。 1 use XML::RSS ; これで、最初の item のタイトルが得られます。 まぁ簡単(^-^) 因みに、一昨年 C で XML のパージングをした時には Xerces を使いました。 これ「ザーシズ」と読むのですが、 どうしてもヘンデルのオペラが先に浮かんでしまい、 「クセルクセス」とか「セルセ」と読んでしまいます。 キャスリーン・バトルのソロで有名になった「オンブラマイフ」のオペラです。 いまだに、あれ?読みはどれだっけ?と、混乱しています(>_<) で、パージングの後、得られたデータをDBに投入します。 DBとの通信はモジュールを使って行いますが、 RSS は utf-8 なので、 DBに投入する文字列を euc-jp に変換する必要があります。 XML::RSS は内部で XML::Parser を使用しているので、 得られた文字列には、すべて utf8 フラグが立っているらしいです。 なんスか、utf8 フラグって(笑) さて、変換の仕方。 ソースファイルを utf-8 で作成します。 1 use utf8; DB クラスの中で、DB とソケット通信をしています。 そのため、ソチラの OUT ストリームも euc-jp でぇすと指定する必要があり、 3 行目の指定が必要になります。 3 行目の代わりに、 binmode STDOUT, ':encoding(euc-jp)'; と指定しても良いのですが、 今実行している関数と DB クラスはスコープが違うので、 これだと、DB クラスまでその指定が適用されず、euc-jp になりません。 使用しているクラスで出力する操作がない場合は、 binmode でも、ちゃんと euc-jp になっていました。 しかし、たった数行に2日とは、 なんと単価の高いプログラムであることよ(;´д⊂ ま、ハマるというのは、往々にして、そういうものですし。 どうせ、今月でこの会社を引き払うので、 大仕事がもらえなくてヒマしていましたから、良いんですけれどね。 この辺のページが、かなり参考になりました。 ありがたや、ありがたや(-人-) utf8 フラグについても、手取り足取り腰取り、記述されています。 NDO::Weblog::Elephant NDO::Weblog の Perl カテゴリ Perl 5.8.x Unicode関連 Perl-5.8 覚え書き
by xiaoxia
| 2005-03-15 18:13
| プログラム言語
|
カテゴリ
以前の記事
2022年 12月 2021年 05月 2019年 12月 2018年 12月 2018年 05月 2018年 03月 2017年 03月 2017年 02月 2016年 08月 2016年 04月 more... 最新の記事
最新のトラックバック
ライフログ
今読んでる
その他のジャンル
記事ランキング
ブログジャンル
|
ファン申請 |
||