スクリプト(test.pl)の記述はUTF-8。
例になるURL('http://**************************')は常に、SHIFT_JISなので読み込みミスをしない様、SHIFT_JISを指定したい。
また、確実に、SHIFT_JISで保存を行いたい。
この2つの条件を満たすperlのスクリプトを教えてください。
宜しくお願い致します。
----test.pl------
#!/usr/local/bin/perl
$URL = 'http://**************************';
use LWP::UserAgent;
use HTTP::Request;
use HTTP::Response;
my $proxy = new LWP::UserAgent;
$proxy->agent('ua');
$proxy->timeout(60);
my $req = HTTP::Request->new('GET' => $URL);
my $res = $proxy->request($req);
my $content = $res->content;
#プログラミングをprogrammingに置換
$str = 'プログラミング';
use Encode qw(from_to);
from_to($str,"utf8","SHIFT_JIS"); #UTF8に変換
$content =~ s/$str/programming/g;
open(F,">text.txt");
print F $content;
close(F);
__END__
http://blog.livedoor.jp/dankogai/archives/51221731.html
以下のソースは utf8 で保存
#!/usr/bin/perl use strict; use warnings; use utf8; use Encode; use LWP::UserAgent; use Path::Class; my $url = shift; my $str = 'プログラミング'; my $ua = LWP::UserAgent->new; my $res = $ua->get($url); my $content = $res->decoded_content; # or Encode::decode('sjis', $res->content); $content =~ s/$str/programming/g; $content = Encode::encode('sjis', $content); my $file = Path::Class::File->new('text.txt'); my $fh = $file->openw; print $fh $content; $fh->close;
decoded_content() は文字化けする場合があるので、content() を使って明示的に Encode::decode() で変換した方が良さそうですね。
http://blog.livedoor.jp/sasata299/archives/51212133.html
Path::Class が使えない環境なら open は3引数で使いましょう。
open my $fh, '>', 'text.txt' or die $!;
http://www.namazu.org/~tsuchiya/perl/perl-5.8.html
ここの上から20%位行ったところの記載に習って書くと、こんな感じですかね。
use utf8; open(F, ">somewhat.txt") or die $!; binmode F, ":encoding(sjis)"; print F "sjisになってるはずな文字列";
手元のUTF8なLinuxで確認した分ではちゃんとSHIFTJISでした。
回答いただきありがとうございます。
この質問をさせていただいたのは、
use LWPを使い何度もホームページをダウンロードしますと、時々、間違いなく、SHIFT_JISのページにも関わらず、他の文字コードで保存されます。
つまりこれは、ダウンロード時、SHIFT_JIS以外に誤認したか、書き込み時(text.txt)、SHIFT_JISで保存されなかったかが原因だと思います。
そこで、入力、出力、どちらも、SHIFT_JISで行いたいと思っています。
また、当方の力不足により、勘違いが発生すると二度手間になりますので、お手数ですが回答いただく際は、コードの一部ではなく、現在のコードを書き変えての回答を宜しくお願い致します。
http://blog.livedoor.jp/dankogai/archives/51221731.html
以下のソースは utf8 で保存
#!/usr/bin/perl use strict; use warnings; use utf8; use Encode; use LWP::UserAgent; use Path::Class; my $url = shift; my $str = 'プログラミング'; my $ua = LWP::UserAgent->new; my $res = $ua->get($url); my $content = $res->decoded_content; # or Encode::decode('sjis', $res->content); $content =~ s/$str/programming/g; $content = Encode::encode('sjis', $content); my $file = Path::Class::File->new('text.txt'); my $fh = $file->openw; print $fh $content; $fh->close;
decoded_content() は文字化けする場合があるので、content() を使って明示的に Encode::decode() で変換した方が良さそうですね。
http://blog.livedoor.jp/sasata299/archives/51212133.html
Path::Class が使えない環境なら open は3引数で使いましょう。
open my $fh, '>', 'text.txt' or die $!;
回答いただきありがとうございました。
これで安定動作しそうです。
>Path::Class が使えない環境なら open は3引数で使いましょう。
これは何故でしょうか?
補足いただけると幸いです。
回答いただきありがとうございました。
これで安定動作しそうです。
>Path::Class が使えない環境なら open は3引数で使いましょう。
これは何故でしょうか?
補足いただけると幸いです。