您的位置:首页 > 运维架构 > Shell

linux批量修改文件字符集shell 脚本

2013-03-05 15:10 183 查看
需求:需要将 “/home/zichen/dxzs0305”目录下所有PHP文件字符集由 UTF-8转换为GB2312

shell脚本内容:

#!/bin/bash -x
SUBFIX="php"  #需要转换的目标文件后缀
cd /home/zichen/dxzs0305     #目标文件根目录

if [ -z $1 ];then
cd $PWD
else
if [ -d $1 ];then
cd $1
else
echo " $1 is not exist;"
exit 1
fi
fi

for i in $SUBFIX;
do
files=`find . -name "*.$i"`
for f in $files;
do
type=`file $f|awk -F':' '{print $2}' |awk  '{print $1}'` #获取文件类型
if [ $type != "ISO-8859" ];then
iconv -f UTF-8 -t GB2312 -o $f $f   #使用  iconv函数进行转换
#  enca -L UTF-8 -x zh_cn $f   #如果使用enca 进行转换,需要安装 enca    命令 sudo apt-get  install  enca
else
echo "$f encoding is :$type"
fi

done
done

iconv 函数参数简介:

iconv命令用于转换指定文件的编码,默认输出到标准输出设备,亦可指定输出文件。

用法: iconv [选项...] [文件...]

有如下选项可用:

输入/输出格式规范:

-f, --from-code=名称 原始文本编码

-t, --to-code=名称 输出编码

信息:

-l, --list 列举所有已知的字符集

输出控制:

-c 从输出中忽略无效的字符

-o, --output=FILE 输出文件

-s, --silent 关闭警告

--verbose 打印进度信息

-?, --help 给出该系统求助列表

--usage 给出简要的用法信息

-V, --version 打印程序版本号

应注意问题 :

1. 转换完成后,请注意与未转换前的PHP文件做对比检查,防止因为转换后的文件破损(使用iconv转换文件,如果文件内部行与行之间存在多个空行,会终止对多个空行后的代码进行转换,忽略不计)而引发其他问题,导致项目无法正常使用。

2.如果系统中使用PHP自带的 json_encode 函数,请注意传递参数或传递查询结果的字符集,好像php自带 的 json_encode只支持UTF-8格式字符集,请注意检查并使用 iconv()函数进行转换,不然会出现中文显示或插入数据库为空现象!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: