2009-09-12 00:28 如果你需要在Linux中操作windows下的文件,那么你可能会经常遇到文件编码转换的问题。Windows中默认的文件格式是GBK(gb2312),而Linux一般都是UTF-8。下面介绍一下,在Linux中如何查看文件的编码及如何进行对文件进行编码转换。 查看文件编码 在Linux中查看文件编码可以通过以下几种方式: 1.在Vim中可以直接查看文件编码 :set fileencoding 即可显示文件编码格式。 如果你只是想查看其它编码格式的文件或者想解决用Vim查看文件乱码的问题,那么你可以在 ~/.vimrc 文件中添加以下内容: set encoding=utf-8 fileencodings=ucs-bom,utf-8,cp936 这样,就可以让vim自动识别文件编码(可以自动识别UTF-8或者GBK编码的文件),其实就是依照fileencodings提供的编码列表尝试,如果没有找到合适的编码,就用latin-1(ASCII)编码打开。 文件编码转换 1.在Vim中直接进行转换文件编码,比如将一个文件转换成utf-8格式 :set fileencoding=utf-8 2. iconv 转换,iconv的命令格式如下: iconv -f encoding -t encoding inputfile 比如将一个UTF-8 编码的文件转换成GBK编码 iconv -f GBK -t UTF-8 file1 -o file2 Linux对一个3G的文本进行编码转换全过程 本过程中涉及到的Linux的命令有:split, iconv, cat 问题:有一个3G的文本a.txt,编码格式为gbk,现在需要对其进行转换成为utf-8。 难点:iconv的转换是在内存中进行的,因此3G大小的文本,无法进行直接转换。 思路:先利用split进行文件切分,然后对每一个字文件进行ivonv转换,最后进行cat合并。 1) ll -h a.txt 查看文件的大小,2.9G 2) wc -l a.txt 查看文件的行数,9千200万行 3) split -l 20000000 a.txt chunk 按照每个文件2千万行进行切割,共分成5个文件 4) 进行转换 iconv -f gbk -t utf-8 chunka > chunka_utf8 -c iconv -f gbk -t utf-8 chunkb > chunkb_utf8 -c iconv -f gbk -t utf-8 chunkc > chunkc_utf8 -c iconv -f gbk -t utf-8 chunkd > chunkd_utf8 -c iconv -f gbk -t utf-8 chunke > chunke_utf8 -c 5) rm chunka chunkb chunkc chunkd chunke 删除原文件 6) cat chunk* > a.txt_utf8 进行合并 至此,工作完成 二、 批量文件编码转换 本操作有风险,请注意操作前备份文件。 1.将原来所有编码为gb2312的*.java文件转换为编码为utf-8的*.java.new文件 for i in `find . -name "*.java"`; do iconv -f gb2312 -t utf-8 $i -o $i.new; done 2.将*.java.new文件的.new扩展名去除 find . -name "*.new" | sed 's/\(.*\).new$/mv "&" "\1"/' | sh 三、 linux下有许多方便的小工具来转换编码, 文本内容转换 iconv 文件名转换 convmv mp3标签转换 python-mutagen 四、 用法: iconv [选项...] [文件...] 转换给定文件的编码。 输入/输出格式规范: -f, --from-co -t, --to-co 信息: -l, --list 列举所有已知的字符集 输出控制: -c 从输出中忽略无效的字符 -o, --output=FILE 输出文件 -s, --silent 关闭警告 --verbose 打印进度信息 -?, --help 给出该系统求助列表 --usage 给出简要的用法信息 -V, --version 打印程序版本号 五、 find default -type d -exec mkdir -p utf/{} \; find default -type f -exec iconv -f GBK -t UTF-8 {} -o utf/{} \; 这两行命令将default目录下的文件由GBK编码转换为UTF-8编码,目录结构不变,转码后的文件保存在utf/default目录下。 六、 Linux下文件名编码批量转换convmv 由于FC将字符编码统一成了UTF8,原来在gb18030下建立的ext3分区中的文件和目录,一挂载到FC上就显示成乱码。google遍整个互联网,说对于目录名和文件名,有一个叫convmv的软件可以对其进行自动转换。 今日下载了convmv,摸索了一套使用方法如下: convmv -f co co co -r 参数:转换子目录。 dir:要转换的目录,当前目录用./表示。 回车执行,这个时候convmv会显示执行的结果,但不会真正对文件进行修改。并提示使用--replace参数进行修改。 七、 批量转换文件的编码 for i in `find ./ -name *.htm` ; do echo $i;iconv -f gb18030 -t utf8 $i -o /tmp/iconv.tmp;mv /tmp/iconv.tmp $i; done find -name “*.htm“ \ -exec iconv -f gb2312 -t utf8 ‘{}‘ -o /tmp/iconv.tmp \; \ -exec mv /tmp/iconv.tmp ‘{}‘ \; |
|