(Perl)UTF-8で別ファイルに書き出したい
現在、jcode.plを使用したShift JISで構成されていた Perlのcgi を UTF-8 に改造しています。
冒頭で use utf8; を宣言した後、jcode関連の文は、全てコメントアウトしてきました。
複数ある別ファイルからデータ読み込む場合も、
open(IN,"<:utf8","$別ファイル"); という形で、"<:utf8"を挿入して、うまく読みこめています。
ただ、読み込んだ後、別ファイルへUTF-8で書きこむのが、どうしてもうまくいきません。
書きこんだ後、文字化けしてしまいます。
書きこんだファイルを開けてみると、日本語が文字化けしています(アルファベットは大丈夫)
以下のPerlをどのように改造すれば、文字コードをUTF-8で書き込みすることができるのでしょうか?
どうかご教授、よろしくお願い致します。
m(_ _)m
---------------------------------
#-------------------------------------------------
# 編集内容登録処理
#-------------------------------------------------
sub EDITREGIST {
#全角英数字を半角に変換
$zenkaku = '0123456789';
$hankaku = '0123456789';
# Jcode::tr(\$in{'CLICK'}, $zenkaku , $hankaku );
$in{'attach_file'} = &AttachCheck($attach,$attach_name);
#ファイルロック開始
if( $lockkey ne "0" ){ &LOCK; }
if (!open(IN,"<:utf8","$linkdata_file")) { &ERROR( read_linkdata ); }
@BASE = <IN>;
close(IN);
foreach $data (@BASE) {
&LINKDATALIST;
if( $in{'editnum'} eq $CNTNUM ){
if( $in{'attach_file'} eq '' ){
if( $in{'CHDEL'} eq '1' ){
$in{'attach_file'} = ''; unlink("$updir/$IMAGE");
}else{
$in{'attach_file'} = $IMAGE;
}
}else{
unlink("$updir/$IMAGE");
$in{'attach_file'} =~ s/$updir\///g;
}
$in{'LINKNAME'} =~ s/\,/&%/g;
$in{'LINKURL'} =~ s/\,/&%/g;
$in{'LINKURL'} =~ s/&/\&/g;
$in{'COMMENT'} =~ s/\,/&%/g;
$in{'COMMENT'} =~ s/\<br \/\>/!%/g;
if( $in{'CLICK'} eq "" ){ $in{'CLICK'} = 0; }
$new_data = "$CNTNUM,$datenow,$DATE_LMT,$DATE_ESY,$in{'OPN'},$in{'NEWMARK'},$in{'CATEGORY'},$in{'LINKNAME'},$in{'HONORIFIC'},$in{'LINKURL'},$in{'COMMENT'},$in{'CLICK'},$in{'attach_file'},\n";
}else{
$new_data = "$CNTNUM,$DATE_LINKDATA,$DATE_LMT,$DATE_ESY,$OPN,$NEWMARK,$CATEGORY,$LINKNAME,$HONORIFIC,$LINKURL,$COMMENT,$CLICK,$IMAGE,\n";
}
push( @TOTAL,$new_data );
}
#実際にファイルに書き込む
if( !open(OUT,">$linkdata_file") ){ &ERROR( read_linkdata ); }
print OUT @TOTAL;
close (OUT);
#ファイルロック解除
if( $lockkey ne "0" ){ &UNLOCK; }
&SendFinish2;
}
お礼
No.1, 2のご回答、ありがとうございます。 Perl v.5.6.1で動作させなくてはならないので、Jcode.pmを使う方法を試してみます。