![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
お世話になります。
下記のスクリプトを使ってrssファイル内をuse Data::Dumper;でダンプして表示してみたのですが、rssファイルがutf8で記述されているせいか
表示時に日本語の所が\x{30fc}のような文字列になってしまいます。
これをshiftjisで表示させたいのですが、試行錯誤してもうまくいきません。
どなたかご教授いただけませんでしょうか。
#!/usr/bin/perl
BEGIN{
$| = 1;
print "Content-type: text/html\n\n";
open(STDERR, ">&STDOUT");
}
use XML::RSS;
use Data::Dumper;
my $rss = new XML::RSS;
#表示形式の違いで1と2がある。
$Data::Dumper::Indent = 1;
use open IN => ":utf8"; # 入力をUTF8とする
use open OUT => ":shiftjis";
#use open ":std";
#use Encode;
#use encoding 'shiftjis', STDIN=>'utf8', STDOUT=>'sjis';
#binmode STDOUT, ":encoding(utf-8)";
#binmode STDOUT, ":encoding(shiftjis)";
#binmode STDOUT, ":encoding(euc-jp)";
#use open ":encoding(shiftjis)";
# rssをセット。
open my $fh, '< ./test.rss';
my $text = join undef, <$fh>;
close $fh;
# rssをパース
$rss->parse($text);
# ひとまず中見を知る為にダンプしてみる
print "Content-type:text/html;charset=Shift_JIS\n\n";
print "<html><head>\n";
print "<title></title></head>\n";
print "<body>\n";
print Data::Dumper->Dump([$rss]);
No.2ベストアンサー
- 回答日時:
#1さんと同じですが
use encoding 'utf-8', STDOUT => 'Shift_JIS';
を始めにつける
…
$out_text = Data::Dumper->Dump([$rss]);
$out_text =~ s/\\x{([0-9a-f]{4})}/chr(hex($1))/eg;
print $out_text;
だけでいいと思います。
No.1
- 回答日時:
こんにちわ。
Data::Dumperのソースを読むと、utfフラグが立った文字はUseqqを有効にした場合と同様に扱うコードが入ってしまっているためです。(出力時の面倒を避けるためだと思いますが、イマイチの実装ですね・・・。)
次の関数を作ってみたので、お試しください。ただし、ダブルクオート内のutf8記述に見える文字列を全て強引に解答しますので、副作用はあるかもしれません。
use utf8;
use Encode;
use Data::Dumper;
sub expand_utf8($){
my $code = shift;
return Encode::encode('Shift_JIS', chr(hex($code)));
}
sub DumperToSJIS($){
my $ref = shift;
my $str = Dumper($ref);
$str =~ s/??x{([0-9a-fA-F]+)}/expand_utf8($1)/ge;
return $str;
}
#こんな感じでDumper関数と同様に使えます。
print DumperToSJIS({'てすと' => '真珠'});
こっちの環境がMacなので、¥マークが?に化けるかもしれません。その辺りは、申し訳ないですが読み取ってください。
# もっとエレガントな解法あるかもしれません。
この度は参考スクリプトまでご掲示頂きありがとうございます。
まだ私の理解度が乏しく、自分のイメージしている事と関連づけるのに
少し試行錯誤しそうです。
ぜひ今後の参考にさせて頂きたいと思います。
有難うございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- PHP PHP MySql 画像を取得 1 2022/06/04 14:05
- Perl RSSにdiv,ul classを付けたいのですがどのようにつけるのかわからないです 2 2022/03/28 01:53
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
perlをwindows環境でshift-jis...
-
[perl5.8] SJISで出力したはず...
-
複数種類の括弧でくくられてな...
-
Data::Dumper;でダンプ後表示し...
-
HTTP::Request::Common qw(POST...
-
VBAでCSVファイルの特定行を書...
-
VBAでCSVファイルを途中行まで...
-
batファイルでrenameができませ...
-
ExcelをCSV書き出す場合のシー...
-
awkスクリプトでダブルクォーテ...
-
DOSコマンドで、標準出力を出力...
-
Firefox で file:// で始まる U...
-
ファイル出力の改行コードをLFに
-
Perlの変数に文字数制限(容量...
-
fopenでディレクトリ内の全ファ...
-
[Perl]ファイル出力のエンコー...
-
同じようなソースなのですが片...
-
エクセルVBA コードが同じでも...
-
巨大なテキストの最終行を取得...
-
エクセルVBAで素数だけを出力す...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
perlをwindows環境でshift-jis...
-
Perl cgiの文字化けを直したい ...
-
perlでuse utf8でsjisのファイ...
-
HTTP::Request::Common qw(POST...
-
消費税の計算で 税込価格から...
-
does not map to shiftjis は解...
-
Perl:Unicodeプロパティ作れない
-
Perlでのファイル出力における...
-
Perl utf8上でshiftjisをデコード
-
複数種類の括弧でくくられてな...
-
Data::Dumper;でダンプ後表示し...
-
utf-8での日本語正規表現の書き方
-
[Perl]Shift-JISのXMLを解析する場
-
ファイル出力をUTF8Nではなくて...
-
perl5.8.3のunicode環境で日本...
-
perlで新規ファイルを作成でき...
-
perlでのtext読み込み
-
[perl5.8] SJISから読み込んだ~と
-
Perl 正規表現について
-
Perlを用いて、XMLファイルの中...
おすすめ情報