• ベストアンサー

PerlでCSVファイルからRSS対応のXMLファイル(UTF-8フォーマット)を作成する方法を教えて下さい。

初めてOKWebを使わせて頂きます。よろしくお願い致します。 社内でホームページを作成しており、新着情報などはCSVファイル(日付、タイトル、内容、URLなどが一行に記載されたもの)を元にPerlプログラムでホームページに表示するようにしています。 このCSVファイルを使って、RSS対応のXMLファイルを生成したくPerlでCSVファイルからXMLファイルを作成するプログラムを記述してみたのですが、作成後、UTF-8フォーマットでファイルを保存する方法がわかりません(現在はShift-JISになっていると思います)。 ファイルをUTF-8に変換し保存するPerlの記述方法がわかりましたらお教えください。 尚、環境は以下となります。 OS:Windows2000Server Web:IIS5.0 ソフト:ActivePerl5.6 他の人が作ったPerlプログラムもあり、できればこの環境(Versionなど)は変えずできると嬉しいです。Perl初心者ですので、できれば具体的な記述方法をお教え頂ければとても助かります。申し訳ありませんが、よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • hok212
  • ベストアンサー率66% (100/150)
回答No.2

ActivePerl5.6系で日本語をUTF-8に変換するにはJcode.pmが必要になります。 もし、Jcode.pmがインストールされてないのでしたら ppm コマンドでインストールしてください。 ------------------- ppm コマンドの使い方 ----------------------- 1. コマンドプロンプトを起動 2. ppmコマンドを入力しPerlPackageManagerを起動 3. ppm> install Jcode エラーが出なければインストール完了 ---------------------------------------------------------------- さて文字コードの変換ですが、ファイルはすでにShift_JISで作成できていると言うことですので 次のようなPerlスクリプトはいかがでしょう? use Jcode; $baseFile = "sjis.txt"; # Shift_JIS $revFile = "utf8.txt"; # utf-8 open(FH,$baseFile); @lines = <FH>; close(FH); foreach (@lines) { $line .= Jcode->new(\$_,'sjis')->utf8; } open(FH,">$revFile"); print FH $line; close(FH); ※ ファイルをわざわざopenしないで変換する方法があるのでしょうが、私は上記のような泥臭い手法しか知りません ^^;

f-kaz
質問者

お礼

ご回答ありがとうございます! PPMコマンドの使い方も記述方法も具体的に書いて頂きありがとうございました! 初心者の自分にはとても助かります。 上記試したのですが、サーバのDosプロンプトででppm>install Jcodeを実行すると Error installing package 'Jcode': Could not locate a PPD file for package Jcode と出てしまいます。PPDファイルを置く場所の設定?もしくはイントラネットの環境に問題があるのかもしれません。初心者ですので、まだここから進めずです。 Jcodeのインストールがうまく行きましたら上記の書き方を是非使わせて頂きます。

その他の回答 (1)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

私は、5.8を使ってて5.6でできるかどうかちょっと自信がないので、 他の安易な方法として XML宣言部分を <?xml version="1.0" encoding="Shift_JIS"?> にしておけば、シフトJISのままでいいかと思います。 また、メモ帳なんかを使えば名前を付けて保存で、UTF8で保存できたと思うので Perlスクリプト自体をUTF8で書くと出力もUTF8になると思います。(その場合読み込むCSVもUTF8にしておく) 環境を変えられないということですが、 Perl5.8以降とか XML::RSSなんかを使うと楽できますよ

f-kaz
質問者

お礼

ご回答ありがとうございます! XML宣言部分の変更でうまく行きました!なるほど~。 Perl5.6と5.8以降では大きな違いがあるのでしょうか? 昔環境がActivePerl5.18から5.22へ変更された時に、一部のプログラムが動かなくなったことがあり、また自分だけの環境でもないので不安があります。でも5.8以降にした方が良さそうですね。XML::RSSも使ってみたいです。

関連するQ&A