プロが教えるわが家の防犯対策術!

日本語処理(文字コード)関係のエラーの対処法について


・環境は、XAMPPを使用しています。
perl、phpの簡単なプログラム(hello worldのようなもの)を実行して動きました。

・asperlを文法チェックに使っています

-実行したいサンプルプログラム-

原文(「SPIDERING HACKS中のプログラム」)は下記のutf8がshiftjisです。が、utf8に変更しました


#!/xampp/perl/bin/perl
use strict;
use LWP::Simple;
use Encode;
use encoding 'utf8'; # 使用しているプラットフォームにあわせてください。
binmode(STDERR, ':raw :encoding(utf8)'); # 同上

my $id = shift @ARGV || '074'; # 引数の取得(デフォルトはニュージーランド)

# 外務省海外安全ホームページ
my $url = "http://www.anzen.mofa.go.jp/info/info4.asp?id=$i …

my $content = get($url);
die "$url を読み込めませんでした。" unless defined $content;

# $contentを読み込んで危険情報を確認する。
$content = decode('utf8', $content); # コンテンツのコード変換
$content =~ s/<!--(.*?)-->//gs; # HTML内のコメント削除
$content =~ / SELECTED>▼([^<]+)</; # 国名の取得
print "$1\n";
if ($content =~ /現在、危険情報は出ておりませんが、/) {
print " 危険情報は出ていません。\n";
} else { print " 危険情報が出ています!\n"; };
print " 詳細はhttp://www.anzen.mofa.go.jp/を見てください。\n";


ローカル環境で、asperlを使用して文法チェックを行うと、エラーはありませんでした。


ところが、ローカル環境で実行すると、

Cannot decode string with wide characters at C:/xampp/perl/lib/Encode.pm line 174.

というエラーが出ます。

これは、Encode.pm の 174行目で引っかかってている、ということでしょうか?

だとしても、対処法が分かりません。

日本語処理で問題が発生しているようなのですが…。

A 回答 (3件)

Perl がどうとかではなく, 「行儀のいいサイト」なら文字コードをユーザーエージェントになんらかの方法で教えています.


だから 3 は「読み込んだ情報からなんとかする」 (普通は meta タグの情報を解析する?) かレスポンスヘッダを見る, 4 についてもレスポンスヘッダで文字コードを明示すれば OK かと.
    • good
    • 0
この回答へのお礼

確かに、文字コードの指定を明示的に行っているサイトがありますね。
ありがとうございました。1歩前進しました。

お礼日時:2010/11/03 10:36

$content = decode('utf8', $content); # コンテンツのコード変換


これ、いらんかも
    • good
    • 0
この回答へのお礼

ありがとうございます。参考になりました。

お礼日時:2010/11/03 10:40

decode しようとしている文字列は, 本当に UTF-8 ですか?

    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

他サイトから情報を取得する際の文字コードについては、下記の設定をしなければならない気がするのですが。

1.Perlで作ったプログラム自体の文字コード。これは保存時の文字コードを選択で設定できます。
2.Perlプログラム内でブラウザ表示させる場合の文字コード。これは、プログラム内で設定できます。
3.取得する対象のサイトで使われている文字コード。
4.ブラウザで設定されている文字コード。閲覧者が設定するので、マチマチです。

3については、どのサイトも明示的に設定されているものなのでしょうか? Perlプログラム内で、どんな文字コードを使用していたとしても、汎用性のあるプログラムを作成することはできませんか?

4について。Perlプログラム内で出力時の文字コードを設定してしまった場合、ブラウザ上での設定とで衝突が起こりませんか? ブラウザの文字コードをPerlプログラムから強制的に変更できたとして、閲覧者が他のサイトを見に行った場合に、文字化けするようなことはないでしょうか?

このあたりが、いまいちよく分からず適切な対処法が分からないでいます。

ご回答の手段とは、プログラム内で変数から値を取り出すような方法で、確認すればいいということでしょうか?

お礼日時:2010/10/19 11:30

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!