shell处理字符编码


    之前使用的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之

 

    好了,不多说,查看脚本吧!

 

Shell代码   收藏代码
  1. #!/bin/bash -x  
  2.   
  3. #由于之前使用windows系统来存放过一些文本文件,利用dropbox同步过来的时候,文件发生乱码,故写脚本来批量处理  
  4.   
  5. #这里是对所有的需求文件进行处理,后续可根据修改目录进行处理  
  6.   
  7. SUBFIX="txt html htm conf"  
  8.   
  9. #cd /home/gavin/tmp  
  10.   
  11. if [ -z $1 ];then  
  12.     cd $PWD  
  13. else  
  14.     if [ -d $1 ];then  
  15.     cd $1  
  16.     else  
  17.     echo " $1 is not exist;"  
  18.     exit 1  
  19.     fi  
  20. fi  
  21.   
  22. for i in $SUBFIX;  
  23. do  
  24.     files=`find . -name "*.$i"`  
  25.     for f in $files;  
  26.     do  
  27.     type=`file $f|awk -F':' '{print $2}' |awk  '{print $1}'` #获取文件类型  
  28.     if [ $type = "ISO-8859" ];then  
  29.         #iconv -f GB2312 -t UTF-8 -o $f $f  
  30.         enca -L zh_cn -x UTF-8 $f  
  31.     else  
  32.         echo "$f encoding is :$type"  
  33.     fi  
  34.       
  35.     done  
  36. done  
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值