DarkMatter in Cyberspace
  • Home
  • Categories
  • Tags
  • Archives

Linux平台上转换文件编码


Linux系统的iconv指令是一个很好的文件编码转换工具,支持的编码范围广,使用方便,例如将一个utf-8编码的文件(名为tic)转换为gbk编码:

iconv -f utf-8 -t gbk tic > ticgbk

可以用"iconv -l"查看系统支持的所有编码列表。

另:用file -i 可以查看一个文件的编码方式。

下面是一个可以一次转换多个文件的脚本:

mkdir dst
for file in $(find src -type f); do
  iconv -f gbk -t utf-8 $file > dst/$(basename $file)
done

这里要注意的是,由于重定向的目标文件所在的目录必须已经存在,所以需要首先创建目标目录dst,其次find命令输出的文件列表是以当前目录为基准,所以输出目标必须去掉路径部分,也就是"basename $file"做的,且源目录src中不能有子目录,否则所有目录下的文件会被摊平放在dst下,如果不同子目录下有同名文件,则最后一个会覆盖前面同名文件的内容。

如果确实需要转换包括子目录的所有文件,可以通过一个临时目录中转,完成该过程的脚本"myconv.sh"内容如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
#!/bin/bash
if [[ $# != 2 ]]; then
    echo Usage: ./myconv.sh src dst
    exit 1
fi
src=$1
dst=$2
mkdir -p tmp
cp -r $src tmp/
for file in $(find $src -type f); do
    #echo iconv from $file to $dst/$file
    iconv -f gbk -t utf-8 $file > tmp/$file
done
mv tmp/$src $dst
rm -rf tmp


Published

Dec 13, 2012

Last Updated

Dec 13, 2012

Category

Tech

Tags

  • file encoding 1
  • gbk 4
  • linux 158
  • utf-8 5

Contact

  • Powered by Pelican. Theme: Elegant by Talha Mansoor