RSS自動生成で文字化け

このQ&Aのポイント
  • RSS自動生成で文字化けする問題について
  • XML::RSSを使用して自動生成されたRSSファイルが文字化けする問題について
  • webサーバーのキャラセット設定やUTF-8Nでのファイル生成にも関わらず、自動生成されたRSSファイルが文字化けする問題について
回答を見る
  • ベストアンサー

RSS自動生成で文字化け

XML::RSSでRSSファイルを自動生成後のファイルが文字化けします。 webサーバーのキャラセットはコメントアウトしています。 キャラセットをAddDefaultCharset UTF-8にしても文字化けします。 スクリプトは下記でテストしています。 文字コードですが、UTF-8Nであれば、ファイルが生成されます。 生成されたファイルは文字化けしています。 ご教授お願いいたします。 #!/usr/bin/perl use XML::RSS; use strict; my $rss = new XML::RSS(version => "1.0"); my $rssdata = [ { title => "RSSテストその1", link => "http://www.*******.***/rsstest", description => "RSSテストその1です。", dc => { subject => "rsstest", creator => "rsstest", date => "2007-06-12T00:00:01+09:00", } }, ]; $rss->channel( title => "*******.***", link => "http://www.*******.***", description => "RSSテスト", dc => { creator => "rsstest", date => "2007-06-12T00:00:00+09:00", subject => "RSSのテストです", }, ); foreach(@{$rssdata}){ $rss->add_item( title => $_->{title}, link => $_->{link}, description => $_->{description}, dc => { subject => $_->{dc}->{subject}, creator => $_->{dc}->{creator}, date => $_->{dc}->{date} } ); } $rss->save("rss.xml");

  • x01ht
  • お礼率47% (10/21)
  • Perl
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
回答No.1

> 文字コードですが、UTF-8Nであれば、ファイルが生成されます。 UTF-8Nに変換している部分や指定してる部分がこのコードにはないみたいです。 ここからは勘ですが、XML::RSS には文字コードを自動でなんとかする機能はついてないはずなので、自分で制御をする必要があります。 1. XML::RSSに渡す文字コードに気を遣う   (このソースの例だと、perlのソースの文字コードがそれになりますね) 2. XML::RSSのコンストラクタに、encodingオプションを渡す   (生成されるRSSの<?xml version='1.0' encoding='XXXXX'?> に埋め込まれます)

x01ht
質問者

お礼

use encoding "ecu-jp", STDOUT => "UTF-8"; 上記を書き加えて、euc文字コード保存で解決しました。 回答ありがとうございました。

関連するQ&A

  • RSS2.0の書き方

    自分のHPのRSSフィード(RSS2.0)を書いたのですが、RSSリーダー(RSSリーダーは既にある前提)で何故か読めません。どこが悪いのか、御指摘いただければ幸いです。 ・RSSフィード名:rss.xml(rss.txtで下記のものを作成して、utf-8に変換してから、拡張子を.txt -> .xmlに変更) ・TOPのHTMLファイルのheadタグ内に以下を記述して、RSSフィードの置いてある場所を指定 : <link rel="alternate" type="application/rss+xml" title="RSS" href="[RSSフィードのあるアドレス]" /> ・RSSフィードの内容: <?xml version="1.0" encoding="UTF-8" ?> <rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xml:lang="ja"> <channel> <title>[サイトのタイトル]</title> <link>[サイトのアドレス]</link> <description>[サイトの紹介、説明文]</description> <language>ja</language> <item> <title>[エントリーのタイトル]</title> <link>[エントリーのアドレス]<link> <guid isPermaLink="true">[エントリーのアドレス]</guid> <category>[エントリーのカテゴリー]</category> <pubDate>[作成日時]</pubDate> <description><[エントリーの紹介文]></description> </item> </channel> </rss> (注)[作成日時]は、Wed, 10 Mar 2010 23:32:13 +0900 のように記述しています。 以上なのですが、何が駄目なのでしょうか? よろしくお願い致します。

    • 締切済み
    • XML
  • RSSからblog(ブログ)の本文を抽出したい

    RSSからblogの本文を抽出するプログラムを 作りたいと思っています。 例えば、以下のようなRSSに対して (省略部分があります。) <?xml version="1.0" encoding="UTF-8" ?> - <rdf:RDF xmlns:rdf="http://~> + <channel rdf:about="http://~"> - <item rdf:about="http://blog.livedoor.jp/~"> <title>ショッピング</title> <link>http://blog.livedoor.jp/~</link> <description>今日はとてもいい天気だったので…</description> <dc:creator>shows</dc:creator> <dc:date>2005-09-24T22:00:21+09:00</dc:date> <dc:subject>ブログ</dc:subject> - <content:encoded>  - <![CDATA[   <a href="http://image.blog.livedoor~">   </a>今日はいい天気だったので、<br>   ショッピングに出かけました<br>   <br>     本文略   <br>   新しいibookが欲しいなぁ~<br>  ]]> </content:encoded> </item> (以降略) <content:encoded>のCDATAセクションの中の、 今日はいい天気だったので ~ 新しいibookが欲しいなぁ~ までがブログの本文なのでこれを抽出したいと思っています。 そこで、現在ではjavaを使ってDOMで抽出しようと試みているのですが、 こちらのサイト http://www.hellohiro.com/xmldom.htm のHelloWorldDOMPageList.javaを参考にしてプログラムを作ったのですが、 title,link,descriptionの抽出は出来ましたが、 ブログ本文が記述されている、 <content:encoded> or <![CDATA[ 内の要素(データ)を取得できません。 どのような方法(プログラム)をすれば取得できるようになるでしょうか? よろしくお願いします。

    • ベストアンサー
    • XML
  • RSS Feedの外部ファイル読み込み

    RSS Feedのソースの中に外部ファイルを読み込むことは出来ますでしょうか? 以下のような感じで、RSS Feedのrss.xmlにcontents.xmlをインクルードすることは、可能でしょうか。 可能であれば、どのように記述すれば良いでしょうか? 分かる方、よろしくお願い致します。 rss.xml----------------------------------------------------------- <?xml version="1.0" encoding="UTF-8" ?> <rss version="2.0" xml:lang="ja"> <channel> <title>RSSのタイトル</title> <link>http://~</link> <description>RSSの説明</description> <language>ja</language> <copyright>RSSのコピーライト</copyright> <lastBuildDate>日付</lastBuildDate> <item> <title>タイトル1</title> <link>http://~</link> <description>タイトル1の説明</description> <category>タイトル1のカテゴリ</category> <pubDate>タイトル2の日付</pubDate> </item> ここに「contents.xml」の内容を読み込みたい </channel> </rss> ------------------------------------------------------------------ contents.xml------------------------------------------------------ <?xml version="1.0" encoding="UTF-8" ?> <item> <title>タイトル2</title> <link>http://~</link> <description>タイトル2の説明</description> <category>タイトル2のカテゴリ</category> <pubDate>タイトル2の日付</pubDate> </item> ------------------------------------------------------------------

    • ベストアンサー
    • XML
  • safari2でRSSの特定要素が読めない

    お世話になります。 早速ですが、safari2でRSSの特定の要素が読めません。 具体的にはgetElementByTagNameでRSSの中の要素を取得できないことがあります。 たとえば以下のRSS(抜粋)で <item rdf:about="http://foo.bar/?eid=555567"> <link>http://foo.bar/?eid=555567</link> <title>タイトルです。</title> <description>内容です。</description> <dc:subject>ブログ</dc:subject> <dc:date>2007-05-28T16:54:38+09:00</dc:date> <dc:creator>hogehoge</dc:creator> <dc:rights>hogehoge</dc:rights> </item> 以下のコードを使って function getValue(tagName, objName, num) { if (num == undefined) num = 0; var element = objName.getElementsByTagName(tagName)[num]; if (element) { try { ret = element.firstChild.nodeValue; return ret; }catch (e){ return ""; } } else { return "no-element["+tagName+"]"; } } alert(getValue("date",items[0]))とすると”2007-05-28T16:54:38+09:00”と 表示されますが、 alert(getValue("'title'",items[0]))とすると”no-element[title]”となり要 素自体を取得できません。 いろいろためしたところ、"dc:xxx"となっている要素は取得できるのですが、先 頭に"dc:"がついていない要素の取得ができないようです。 WindowsでのIE6,IE7,Opera9,FireFox2では正常に取得できることは確認していま す。 対処法などございましたらご教授いただければ幸いです。 見づらい文となってしまい、申し訳ありません。

  • RSSがgoo RSSリーダーV3で表示されない

    DBの内容をRSSで出力しgoo RSSリーダーで表示しようとさせていますが、うまくいきません。具体的にはgoo RSSリーダーでRSSサイトの登録はできるのですが、選択すると上のペイン(タイトルが表示されるところ)は空白で、下のペイン(内容が表示されるところ)はxmlのソースが生で表示されます。他のRSSサイトの表示は問題ありません。(インターネット/イントラネット) 出力方法はイントラサーバーのDB(Accessファイル)からASPがデータを成形後RSSファイルを出力させるものです。(下記に出力後のソースを記入します。一部データをハイフンでおきかえています) <?xml version="1.0" encoding="Shift_JIS"?> <rss version="2.0"> <channel> <title>更新情報RSS</title> <link>http://---.html</link> <description>---をチェック</description> <language>ja</language> <pubDate>Fri,2 Feb 2007 13:49:00 +0900</pubDate> <generator>------</generator> <item> <title>タイトル1</title> <link>http://---.html</link> <description>内容紹介1</description> <pubDate>Thu,1 Feb 2007 11:39:29 +0900</pubDate> </item> <item> <title>タイトル2</title> <link>http://---.html</link> <description>内容紹介2</description> <pubDate>Thu,1 Feb 2007 11:45:29 +0900</pubDate> </item> </channel> </rss> IE6.0でソースの表示はできるのでXML構造には問題ないと思います。アドバイスよろしくお願いします。

    • 締切済み
    • XML
  • ログファイルからRSS生成

    こんにちは。CGI初心者なので、お手やらかにお願いします。 現在、RSSを勉強しておりまして、以下のようなRSS生成CGIを作りたいです。 ご存知の先生方、どうぞ宜しくお願いします。 今回、最新情報などのCGIのログファイルからRSSを生成したいのです。 データの形式は、 ID←tab→タイトル←tab→内容 となっており、このIDがリンクの為のURLになります。 RSSリーダー等で読み込んだ時にタイトルが表示され、リンクできればと思っています。 因みに文字コードは、SJISです。 わかりずらい説明で申し訳ございません。 何卒、宜しくお願いします。

  • XMLのエラー

    XMLのエラー RSS作りの勉強のため、XMLを作成していったんローカルフォルダに保存したあと、IE8でテスト表示してみたるとこんなエラーが出ます。↓↓ XML ページを表示できません XSL スタイル シートを使用した XML 入力は表示できません。エラーを訂正してください。 [更新] ボタンをクリックするか、または後でやり直してください。 -------------------------------------------------------------------------------- テキストの内容に無効な文字が見つかりました。リソース 'file:///(ファイルの保存場所)' の実行エラーです。 XMLの文は下です。 <?xml version="1.0" encoding="utf-8" ?> <rss version="2.0"> <channel>   <title>RSS2.0 Test</title>   <link>(適当なリンク先)</link>   <description>RSS2.0のテスト</description>   <language>ja</language>   <item>    <title>ページ1</title>    <link>(適当なリンク先)</link>    <description>1つ目のページ</description>    <pubDate>Mon, 20 Jul 2010 00:00:00 +0900</pubDate>   </item>   <item>    <title>ページ2</title>    <link>(適当なリンク先)</link>    <description>2つ目のページ</description>    <pubDate>Tue, 21 Jul 2010 03:04:05 +0900</pubDate>   </item> </channel> </rss> よろしくお願いします。

    • ベストアンサー
    • XML
  • RSSを取得したいのですが

    下記サイトを参考に、以下のコードを埋め込んだのですが、 http://plaza.rakuten.co.jp/kemusiro/diary/200601150000/ 日付が (1970/01/01 00:00:00) と表示された上に文字化けしてしまいます。 MagpieRSSはmagpierss-0.72.tar.gzから必要ファイルを、index.phpの下におきました。 正常に表示させるためには、どう直せばよいでしょうか? <?php require_once('magpierss/rss_fetch.inc'); define('MAGPIE_OUTPUT_ENCODING', 'UTF-8'); $count = 5; $length = 60; $url = 'http://api.plaza.rakuten.ne.jp/kemusiro/rss/'; $rss = fetch_rss($url); echo "<ul>"; array_splice($rss->items, $count); foreach ($rss->items as $item) { $href = $item['link']; $title = mb_convert_encoding($item['title'], "SJIS", "auto"); $date = date('Y/m/d H:i:s', parse_w3cdtf($item['dc']['date'])); $description = mb_convert_encoding($item['description'], "SJIS", "auto"); if (mb_strlen($description) > $length) { $description = mb_strcut($description, 0, $length) . "..."; } echo "<li>"; echo "<FONT color=\"#ff8040\">(" . $date . ")</FONT> "; echo "<a href=$href>" . $title . "</a><BR>"; echo $description . "</li>"; } echo "</ul>"; ?>

    • 締切済み
    • PHP
  • PHP4でXML

    こんにちは。PHPでXMLファイルを書き換えたいのですが、サーバ環境がPHP5ではありません。以下のようにHTMLと同じ方法でphpファイルを読み込むことは不可能なのでしょうか?だとしたら他に良い方法はありますか?困っています。どなたか助けてください。よろしくお願いします。 <?xml version="1.0" encoding="utf-8"?> <rss version="2.0"> <channel> <title>○○1</title> <link>http://○○</link> <description>ウェブサイトに掲載されている最新の情報を掲載しております。</description> <language>ja</language> <copyright>Copyright (c) 2007 ○○, Inc. All Rights Reserved.</copyright> <pubDate><?php include("../rss/date.php"); ?></pubDate> <item> <title>ニュースリリース</title> <link>http://○○</link> <description><?php include("../rss/news.php"); ?></description> <pubDate><?php include("../rss/date.php"); ?></pubDate> </item> <item> <title>商品一覧ページ</title> <link>http://○○</link> <description><?php include("../rss/prodact.php"); ?></description> <pubDate><?php include("../rss/date.php"); ?></pubDate> </item> <item> <title>沿革</title> <link>http://○○</link> <description><?php include("../rss/corporation.php"); ?></description> <pubDate><?php include("../rss/date.php"); ?></pubDate> </item> </channel> </rss>

    • 締切済み
    • XML
  • XML::RSS文字コード統一の仕方がわかりません

    perl初心者です。 rssを取得して簡易ブログパーツをつくりたいのですが文字コードでうまいこといかず悪戦しています。 以下がコードです。(きたなくてすいません…) #!/usr/bin/perl use LWP::Simple; use XML::RSS; use utf8; use open ":utf8"; $logfile="./syoukai.log"; open(DAT, "$logfile"); @log=<DAT>; close(DAT); my $rss = new XML::RSS; @list = (); foreach(@log){ ($nom,$name,$prof,$xml,$btitle,$ktitle,$klink)=split(/<>/); eval { $rss->parse( LWP::Simple::get($xml) ); }; if($@) { next; } $btitle = $rss->{'channel'}->{'title'}; $prof = $rss->{'channel'}->{'link'}; $item = $rss->{'items'}; $line = @{$item}[0]; $ktitle = $line->{'title'}; $klink = $line->{'link'}; $date = $line->{'pubDate'}; push(@list, "$date<>$name<>$prof<>$xml<>$btitle<>$ktitle<>$klink<>\n"); } open(IN,">$logfile"); print IN @list; close(IN); exit; syoukai.logを呼び出して そこに書かれたxmlを順番に読み込んで ファイルを更新したいのですが これだと何もいじっていない$nameは大丈夫なんですが $btitleや$ktitleが文字化けしてファイルに書かれてしまいます…。 use utf8;ではなく use encoding 'UTF-8', STDOUT => 'cp932';としたら 今度は$nameだけ文字化けしてしまいます。 別々の文字コードを一緒にしてしまってるからだと思うのですが どれがどの文字コードなのかがわからないでいます。 文字コードを統一する方法などがあれば教えてくださいm(__)m 説明&記述ヘタですいません…。 宜しくお願いします。

専門家に質問してみよう