作者dkview (肉肉的猪脚)
看板perl
标题[讨论] 我的 Big5 转 UTF-8 的简单程式
时间Sat Sep 16 07:21:27 2006
我写了以下的小程式来转换档案的内容从 Big5 变成 UTF-8,
并且加上 BOM 。遇到已经转换过编码,就不再转换。
可是觉得似乎累赘的写法很多,可是我已经没办法精简了,
而且也不知道怎麽让任何档案(除了big5_to_utf8.pl自己)
都可以转换。
不知道有没有更好的写法,还请多多指导。
# 读入同一个目录下的 data.txt 档案
open (FILEHANDLE_R, "data.txt") or die "cannot open data";
open (FILEHANDLE_C, "data.txt") or die "cannot open data";
read(FILEHANDLE_C,$check_content,3);
# 检查 UTF8 BOM,如果已经有 UTF-8 BOM 的记号,则马上离开
my $top1 = unpack("C", substr($check_content, 0, 1));
my $top2 = unpack("C", substr($check_content, 1, 1));
my $top3 = unpack("C", substr($check_content, 2, 1));
if($top1 eq 239 && $top2 eq 187 && $top3 eq 191) {
print "The File is already with UTF-8 encodeing";
exit;
}
close (FILEHANDLE_C);
# 如果没有 UTF-8 BOM 记号则继续将档案转换成 UTF-8
use utf8;
binmode (FILEHANDLE_R, ":encoding(big5)");
while(read(FILEHANDLE_R,$line,1)) {
$utf8_content .= $line;
}
close (FILEHANDLE_R);
# 加上 BOM 纪录,将 UTF8 的编码内容写入原档案
open (FILEHANDLE_W, ">data.txt") or die "cannot write data";
$BOM=chr(0xFEFF);
print FILEHANDLE_W $BOM;
print FILEHANDLE_W $utf8_content;
close (FILEHANDLE_W);
# 离开
__END__
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 218.166.77.69
※ 编辑: dkview 来自: 218.166.77.69 (09/16 07:22)