[Perl脚本]把整站所有文件由GB转化成utf-8的Perl脚本

| 2 Comments | 0 TrackBacks | WebBlog Articles

This is a SiteLog of Easun's WebBlog.。
恩。和国际接轨吧。 虽然我的Website基本上全是 utf-8 编码的,但是还是有部分是 gb2312 的。懒得一点一点修改,找Perl吧。
代码如下:

#!/usr/bin/perl -w
#
# GB->utf By Easun(路杨)
# http://easun.org
#
use strict;
use warnings;
use CGI();
my $cgi= new CGI;
use CGI::Carp qw(fatalsToBrowser); #打开浏览器检错,不需要请删除之。
use Encode qw/from_to/;
#WebSite的变量设置

#转化的原始路径:
my $mydir ='/webdata/perl'; #没有'/'
#要生成的转化完毕的文件存放路径。如果和上面路径相同就是覆盖
my $myoutdir ='/webdata/perl_new'; #没有'/'

print $cgi->header(-charset=>'utf-8');
&dodir($mydir,$myoutdir);
print 'That is all OK!';
exit;

sub dodir
{
my ($mydir,$outdir) =@_;
unless (-e $outdir) { mkdir ($outdir, 0777) ;}

opendir(DIR, $mydir);
my @files = readdir(DIR);
close(DIR);
print '<div><h3>当前目录:'.$mydir.'</h3><h3>目标目录:'.$outdir.'....</h3>';
for (0 .. $#files)
{
my $name = $files[$_];
next if $name eq '.';
next if $name eq '..';

if (-d $mydir.'/'.$name)
{
&dodir($mydir.'/'.$name,$outdir.'/'.$name);
next;
}
# 开始当前文件
print '<ul><li>开始转换'.$mydir.'/'.$name.'....</li>';
open(FILE, $mydir.'/'.$name);
my @data = <FILE>;
close(FILE);
my $data = join("", @data);
if ($data =~ /charset\=gb2312/) { $data =~ s/charset\=gb2312/charset\=utf-8/s; }
from_to($data, "gbk", "utf8");
open(FILE, ">$outdir/$name");
print FILE $data;
close(FILE);
print '<li>'.$outdir.'/'.$name.'convert success!</li></ul>';
# 结束
}
print '</div>';
}
1;

注意: 由于懒惰,我没有判断文件是否是文本性质(html或者xml,php,cgi,pl,js)的就全部转化了,也没有判断是否需要转化(即已经是utf-8编码),你可自己添加判断或者你使用生成新文件的办法,或者保证目录下面全部是需要转化的,不然,万一你的目录下面有图片文件或者zip.rar等2进制文件被转化了可就麻烦了哦:)

引用通告|TrackBacks (0)

本日志的TrackBack URL: http://easun.org/cgi-bin/mtos/tb_mt_41.pl/124.

本文相关评论|Comments (2)

那就来个先行备份的无责声明嘛,嘿嘿~~:P

呵呵:) 代码只是参考。只是提供思路而已 :P

发表该文评论|Leave a comment

最近发表|Recent Entries

[MT Tips]如何让某个日志在Blog首页固顶?

貌似最简单的办法就是修改日期到一个很遥远的日期,比如 AnySQL 那样:) 但是带来的问题的很多,比如导致Feed阅读器犯糊涂或者影响搜索引擎的收录等等,更糟糕的是对于 日志来说,最主要的就是发布日期。也许大家都已经发现了,我的主页模仿 MT Forum 搞了一个固顶日志(也是为了风格统一)出来,这个固顶日志是后台通过自己设置实现的。是怎么设置的。答案是利用 <mt:Entries> 的tags 功能。 具体概念代码如下:<mt:Entries tag="@top" sort_by="authored_on" sort_order="descend" limit="1" blog_ids="1,5"> dosthing.....</mt:Entries> 这样我们只要要在固定的主题 加上…

北京 Perl Workshop 2008 网站开张 - 接受大会注册,演讲报名

网站开张了, 地址是 http://conference.perlchina.org/bjpw2008/ 由 PerlChina 和 Postgresql China 合办,2008 年 11 月 8 号举行的 Beijing Perl Workshop 是一个免费的 Perl 交流会,向所有对…

好玩的 MT Forum 的按作者归档

Perl Forum 用 MT4 的 MT Forum 的功能搭建起来了好几天了,一直没有发现什么意外,今天突然发现 按作者按月归档 貌似找完了整个发布完的 Perl Forum 也没有找到 link ,查看作者个人信息貌似也没有 link ? 真是好玩的 归档方式。从后台看,给每个用户(作者)都建立了按月的归档页面,估计是为了便于各用户归档自己的文章吧? 后台抓图如下:…