linux 文件编码格式转换

12 篇文章 0 订阅

http://hi.baidu.com/skyyjl/item/50a50dcd62d94edbee183baf


如果你需要在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
比如将一个GBK编码的文件转换成UTF-8 编码
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.9G2) 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 -c5) 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; done2.将*.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 ‘{}‘ \;



http://www.2cto.com/os/201210/162788.html

利用vim进行文件编码批量转换

 
  经常把代码在 windows 下和 linux 下传来传去,苦于程序源代码文件的编码问题,windows 下是 cp936 格式,linux 下通用 utf-8 格式,发布源代码的时候也需要两种编码各一份,逐个文件的进行编码转换实在是一份让人痛苦不堪的活,好在 vim 有批量编辑文件的功能,这要用到 args 和 argdo 命令,可以查看 :help args 与 :help argdo 以获得详细的说明。
 
这里只说下这两个命令在对文件进行批量转换编码的用法:
 
一、设置文件集合,
即要对哪些文件进行操作,可以使用通配符,比如我通常是对 C/C++ 源程序进行编码转换:  
 
:args *.h *.cpp
 
二、给出要在每个文件上执行的命令,这里是转换编码:
 
:argdo set fenc=utf-8 | update
 
这样就 ok 了,一边偷着乐去吧。这里要注意的是如果要同时执行多个命令则需要用 “|” 隔开,上面的 update 一定要写上,因为 vim 在一个文件被修改后尚未保存的情况下去编辑下一个文件会给出出错提示的,用上这个 update 就是更新文件了,这样就不会出这个问题了。
 
  当然,args 和 argdo 能做的事情多的很,比如可以在多个文件中批量替换,这个应该也很实用吧,具体可以查看 vim 的帮助文件  :help args  和 :help argdo.


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值