【Perl】まとめて【utf8】フラグ付けることできますか?

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 です。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:--
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答1件)

id:thrillseeker No.1

回答回数328ベストアンサー獲得回数37

ポイント40pt

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}) );

}

id:radio3

おっしゃるとおりですが、それも”逐一decode()”ですので...

binmodeように、まとめて簡単に指定できる方法があるのではないかと推測しておりまして...

2006/01/12 20:35:35

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません