这两天在将以前的项目移到虚拟机的ubuntu中,遇到了一个问题,就是文件编码格式,在window下默认是GBK,在linux下默认是utf-8,以前的项目因为表配置等原因,编码格式用的gb2312,导致移到linux下的时候所有的中文乱码了,虽然可以通过改变linux的环境来解决,但是考虑到一些原因,比如便于维护等,打算用转换文件格式来解决,就搜索了下资料,进行了一些整理归纳。
其实有很多办法,这里写的是最简单,并经过测试的方法。
1.enca(如果没有这个命令的,可以apt-get一下)
格式:$enca -L 当前语言 -x 目标编码 文件名
具体使用方法可以enca --help一下,这里讲下一些问题,首先,你可以enca 文件名
如图,它可以显示该文件的编码格式,然后你就可以用上面的命令进行转换,但是呢,它有个问题,支持的格式不多,比如它就不支持GB2312.....(可以使用enca --list languages来查看,如图所示)
当然,你也可以不指定文件编码,只指定目标编码,也是可以直接转换的,比如上面这个我就是不指定直接解决的。如果是想批量转换文件下的所有文件,用*替换文件名即可,但是有个很大的问题,就是不支持-r,即递归子文件夹,这是一个很D疼的问题,所以我放弃了这个命令。
2.iconv
这个命令大家应该都知道,linux下转换文件格式常用的命令,但是有个问题,就是不能批量转,怎么办呢?这时候就要用到linux强大的命令行了,还记得find命令吗,这个命令可以用来做很多事,这里我们就用来来解决这个问题,下面的命令是我搜索资料时找到的,具体如下:
find default -type d -exec mkdir -p utf/{} \;
find default -type f -exec iconv -f GBK -t UTF-8 {} -o utf/{} \;
命令的意思就是将default下的所有文件转化为UTF-8,并保持目录结构不变,将转化后的文件放到utf文件夹下,具体的default和utf你们可以自行更改,转化完后在自己mv或cp下我就不具体说了,希望以上这些对你们有所帮助。
参考资料:http://www.cnblogs.com/singleboss/archive/2012/05/08/2490864.html