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

いつもお世話になっております。

Perlのデコード処理で分からない事があります。
大変申し訳ございませんが、
ご存知の方がいらっしゃれば、教えて頂けますでしょうか。

以下のプログラムを実施すると以下のエラーが発生しまい
正しくデコードされた結果が表示されません。
この場合、どのようにして$sの文字をUTF-8と判断させて
shiftjisに変換すればよいのでしょうか?

(プログラム)
#!/usr/local/bin/perl

use Encode qw/from_to/;
use Encode::Guess;

Encode::Guess->set_suspects(qw/shift-jis euc-jp 7bit-jis/);

$s = '%E7%A7%BB%E8%BB%A2'; # UTF-8
$s =~ tr/+/ /;
$s =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("H2", $1)/eg;
my $decoder = Encode::Guess->guess($s);
die $decoder unless (ref($decoder));
&from_to( $s, $decoder->name, "shiftjis" );

print $s;

(エラー内容)
shiftjis or euc-jp or utf8 at test.pl line 12.

A 回答 (1件)

極めて正常な動きだと思います。



%E7%A7%BB%E8%BB%A2 は Shift_Jis にも EUC-JP にも UTF-8 にも解釈できます。

Shift_Jis 遘サ霆「
EUC-JP 腱肢拶
UTF-8 移転

Encode::Guess というのは、そういうものです。 '%E7%A7%BB%E8%BB%A2' をUTF-8 だと断定する根拠が無いから UTF-8 だと判定しないのです。

過大な期待はやめましょう。
    • good
    • 0

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