DBからフェッチした日本語文字列に、utf8フラグを付ける場合、逐一 decode() しなければならないのでしょうか?
詳細スクリプト
http://www3.ezbbs.net/15/radio3/
----
use utf8;
use Encode;
use DBI;
my $dbh = DBI->connect(”DBI:mysql:$db_name:$db_server”, $db_user, $db_user_pass) or die qq(DB接続不能: $DBI::errstr);
my $sth = $dbh->prepare(”SELECT * FROM $table”);
$sth->execute;
for($i=0; $i<$sth->rows; $i++){
$hash[$i] = $sth->fetchrow_hashref();
## 全ての列に対してdecode()実行?
if(! is_utf8($hash[$i]->{”name1”})){ # 名前をutf8化
$hash[$i]->{”name1”} = decode(’Guess’, $hash[$i]->{”name1”});
}
# 以下、延々
}
----
binmode STDIN, ’:encoding(euc-jp)’;
とやってもダメでした。
guess_encoding($hash[$i]->{”name1”}) の結果は XS=SCALAR です。
http://santamartadotnet.hp.infoseek.co.jp/documents/perl/learnin...
smdn: Perl学習帳 その6 ハッシュ(連想配列)
ベタなやり方ですが、keys で連想配列 %{hash[$i]} のキーを配列として取得し、
それを元に foreach 文を回せば キーを逐一書く手間は一応省けます。
foreach $key ( keys(%{hash[$i]}) ) {
$hash[$i]->{$key} = decode(’Guess’,$hash[$i]->{$key} ) unless ( is_utf8($hash[$i]->{$key}) );
}
おっしゃるとおりですが、それも”逐一decode()”ですので...
binmodeように、まとめて簡単に指定できる方法があるのではないかと推測しておりまして...