用Perl实现一个批量文件转码工具
来源:互联网 发布:云计算应用案例有哪些 编辑:程序博客网 时间:2024/06/05 17:38
前几天在看Ultimate_ToolBox的源代码,从codeproject上down下来一编译,一堆错误,发现是由于编译器无法识别ISO-8859-1编码,误读有关字符造成的,所以立即着手准备转换程序源文件编码,google了一把,也下了两个小软件,但是都没有批量转换功能,而有这功能的又不支持从ISO-8859-1到UTF-8的转换,于是想到从前在FreeBSD下UTF-8和GB2312互相转换的函数的iconv库,我知道iconv不但是一个程序库,而且有一个同名的应用程序能够将文件在两种编码中转换。用这个iconv程序搭配脚本再利用重定向功能应该可以很轻松地完成批量转换文件编码的工作。
在实际编写脚本的过程中,害怕将来运行出现意外,所以并没有将转码过后的文件重定向到源文件上,而是指定了另外一个位置,同时为了将来对Ultimate_ToolBox整个代码编译的方便,对工程目录中不用进行编码的文件,全部原样拷贝到新的位置,这样一个递归遍历目录,批量转换文件编码的小工具就诞生了。
附上Perl的源程序,如果windows下有已经移植过的iconv,则搭配ActivPerl也可以运行在windows环境下。
#!/cygdrive/c/Perl/bin/perl
#######################################################
#用途: 批量转换某文件夹内程序源文件的编码,其余文件不变
#
#用法: $./change_codepage.pl > log.txt
#
#Author: Changhailong
#
#E-mail: hailongchang165210@gmail.com
#######################################################
use File::Find;
use File::Copy;
use File::Path/make_path/;
#在这里指定需要转换codepage源文件的目录
$source_dir="d:/temp_code/ultimate_tools";
#在这里指定目标目录
$destination_dir="d:/temp_code/pp";
find(/&traverse,$source_dir);
sub traverse()
{
my $file=$File::Find::name;
my $df =$file;
$df =~ s//Q$source_dir/E/$destination_dir/g;
print("source: $file/n");
print("destination:$_/n");
if(-d $_)
{
if(-e $df)#如果目录已经存在,继续递归遍历
{
print("The directory has been exist:$df/n");
last;
}
else#如果目录不存在,则创建目录
{
print("It is a directory, create:$df/n");
File::Path::make_path($df);
}
}
else
{
if(//.cpp$|/.h$|/.c$|/.inl$/i)#这里用正则表达式指定需要转换编码的文件类型
{
my $cmd = "iconv -f ISO-8859-1 -t UTF-8 </"$file/" >/"$df/""; #将ISO-8859-1转换为UTF-8
print "$cmd/n";
system $cmd;
}
else#若不是需要转换编码的文件类型,拷贝到新的位置
{
print("copy $file to $df/n");
copy($file,$df) or die "copy failed: $!/n";
}
}
print("/n/n/n");
}
- 用Perl实现一个批量文件转码工具
- Perl]文字/代码批量替换工具 [转]
- perl批量处理文件
- 一个用FTP批量上传文件的perl脚本,支持目录上传
- 用Perl脚本实现MS批量任务
- perl脚本实现批量生成手机号码存放到文件中
- 用 perl 实现文件上传
- perl 6 批量处理文件
- perl-批量修改文件后缀名
- 用PERL实现一个简单的NIDS
- perl实现从一个文件中随机抽取n行
- 批量文件重命名工具
- 批量文件重命名工具
- 用perl实现命令行打开执行文件
- 批量去掉pdf文件密码perl脚本
- linux perl 批量替换文件内容
- perl 批量导入文件到sqlite3
- perl命令行批量修改文件内容
- LogCat显示中文为乱码
- 最大熵工具包的使用
- PL-SQL的使用
- Apache Commons IO工具包
- 直接调用类成员函数地址
- 用Perl实现一个批量文件转码工具
- 牵手
- H.264avs解码
- Oracle 主机修改IP地址导致的问题的处理
- sql float 转 varchar
- AIDL --- Android中的远程接口
- windows xp 系统下安装完oracle后,设置归档模式的过程以及方法!
- Wince 添加蓝牙设备
- JAVA文件操作(2)