浏览 4006 次
锁定老帖子 主题:shell处理字符编码
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-10-30
之前使用的dropbox中,会存放一些文本文件,在windows上的默认编码都是gb2312来做的保存,现在完全切换到ubuntu上,所以需要对所涉及到的一些文本文件的编码修改,文件多啦,谁都不想手工一个一个修改,那就写脚本来处理吧!
思路: 1. 首先,我得知道这个文件具体采用的是什么样的编码,如果是ISO-8859我将会把它转成UTF-8,其他的ASCII这些都先不做处理,这里可以使用file filename或者是enca iconv enca需要获取下:sudo apt-get install enca iconv的一般用法是:(可以man iconv) -f from code 源文件编码 -t to code 目标文件编码 -o output file 保存为文件 例子:
iconv -f GB2312 -t UTF-8 -o google.txt google.txt 将google.txt的编码由GB2312更新为UTF-8
enca也同上用法,一般在脚本中对于未曾提供的语言,enca不会报错,这样可以保证脚本顺利执行
enca -L zh_CN file 检查文件编码 enca -L zh_CN -x UTF-8 file 将文件编码修改为UTF-8并覆盖文件
具体的用法都可以去查看man手册或者google之
好了,不多说,查看脚本吧!
#!/bin/bash -x #由于之前使用windows系统来存放过一些文本文件,利用dropbox同步过来的时候,文件发生乱码,故写脚本来批量处理 #这里是对所有的需求文件进行处理,后续可根据修改目录进行处理 SUBFIX="txt html htm conf" #cd /home/gavin/tmp 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 GB2312 -t UTF-8 -o $f $f enca -L zh_cn -x UTF-8 $f else echo "$f encoding is :$type" fi done done
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |