linux 文件编码格式转换

[如果你需要在]

[查看文件编码]

[在Linux中查看文件编码可以通过以下几种方式:]

[1.在]

[: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-code=名称
原始文本编码]

[-t, –to-code=名称
输出编码]

[信息:]

[-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 code1 -t code2
-r]

[code1:分区原来使用的字符集编码。支持gb2312、gbk、big5,不支持gb18030和big5-hkscs。]

[code2:预转换到的字符集编码。对于FC,这里填写utf8]

[-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 ‘{}‘
\;]

坚持原创技术分享,您的支持将鼓励我继续创作!