Linux中的文件转换
上次在《Linux下的几个操作中,记录备忘》中,转载了网友的方法,写一个脚本cc.sh来解决iconv不能主动识别现有文件编码的问题。
但每次要用时都把cc.sh代码复制下来,也不方便。
搜索了一下,有个更好的工具叫做enca,可以自己识别源文件的编码,如果编码已经相同了,就不转换,也不会象iconv一样报错。可我试用了一下,有问题,估计作者没在中文下仔细测试,我的GB2312文件中的"不"变成"上","名"变成"吊",添乱啊!作者从2005年1.9发布至今,就不曾更新过。
无奈,自己想办法,双管齐下。enca负责识别文件编码,iconv负责转换,gawk架座桥梁。
当前目录下的php文件,比如a.php是UTF-8编码的,复制一份为a.php.u,其他的编码的文件,则转换编码为UTF-8,另为a.php.u。
现在,如果源文件不需要了,删掉吧,并且把转换好编码的文件去掉最后的.u,就像下面这样做:
enca -i *.php | gawk -F ": " '{print $2~/^UTF-8/ ? "cp "$1" "$1".u" : "iconv -f "$2" -t UTF-8 "$1" > "$1".u"}' | sh rm *.php rename .php.u .php *.php
enca总是猜错,还是用Linux系统自带的file --mime-encoding 命令吧