如果你需要在 Linux 中操作 Windows 下的文件,那么你可能会经常遇到文件编码转换的问题。Windows 中默认的文件格式是 GBK(gb2312),而 Linux 一般都是 UTF-8。下面介绍一下,在 Linux 中如何查看文件的编码及如何进行对文件进行编码转换。

方式一:iconv

查看文件编码

在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) 编码打开。

.vimrc` 文件设置的方法

2. 文件编码转换
  • 在Vim中直接进行转换文件编码,比如将一个文件转换成 utf-8 格式
:set fileencoding=utf-8
  • iconv 转换,iconv的命令格式如下:
iconv -f encoding -t encoding inputfile
比如将一个 GBK 编码的文件转换成 UTF-8 编码
iconv -f GBK -t UTF-8 file1 -o file2

iconv -f gbk -t utf8 linux常用命令.txt > linux常用命令.txt.utf8
3. 文件编码批量转换
find .  -name "*.txt" -exec sh -c "iconv -f GB18030 -t UTF8 {} -o {}" \;

说明:

  • 将当前目录及其所有子目录中的以 txt 为后缀的文件,从 GB18030 转换为 UTF-8
  • 注意备份文件,上面的命令有时候执行出错,可能将你的文件毁灭。。。。。
  • 第一个 . 表示当前目录,换成你的目录。-o 为输出(经试验发现将 -o 换成 > 后,不会得到你想要的结果,而是直接将问文件清空了)
  • {} 表示 exec 传递过来的参数,即文件名,这样就会覆盖原来的文件,也就是不另行创建新文件
  • 写成 {}.tx t的形式,就会创建一个同名但带有 .txt 后缀的文件。如:转换前的HelloWorld.txt 将会变为 HelloWorld.txt.txt
  • 除了用 exec 外还可以用 xargs 传递(可以传多个参数)
  • 后面的 \; 必须加上

文件名的转换方式,参照这种方式

方式二:enca(或者 enconv命令,两个都一样)

sudo命令安装

sudo apt-get install enca

源码安装

  • 下载地址:http://dl.cihar.com/enca/
  • 解压压缩包,阅读README文档(不同版本存在些许差异)
#解压,解压后目录enca-1.15-9-g6705ca9
tar xvf enca-1.15.tar.gz 

#进入源码目录
cd enca-1.15

#根据REAMDE说明依次执行如下命令,进行安装
./configure
make
make check
make install
1.使用enca可以直接查看文件编码(enca不能用enconv代替)
enca -L zh_CN file_name

#查看本目录下文件编码格式:
enca -L zh_CN  `ls`
2.编码转换为UTF-8(覆盖原文件)
#将文件编码转换为"UTF-8"编码
enca -L zh_CN -x UTF-8 file_name
enca -L zh_CN -x UTF-8 file1 file2  #如果不想覆盖原文件可以这样

#把文件夹下的所有文件转换为utf8编码,注意:里面不能有嵌套
enca -L zh_CN -x utf-8 *

#或者
enca -L zh_CN -x utf-8 file_name/
3.若要批量转码某个文件夹下后缀名是.txt的文件(文件夹里有嵌套文件夹)
find file_name/ -name "*.txt" | enca -L zh_CN -x UTF-8

注:以上 enca 命令均可换为 enconv(除了查看文件编码)。在应用上 encaiconv 更傻瓜,在中文支持上 encaiconv 支持得好,iconv 当遇到不支持的中文时会跳过或者报错 cannot iconving。所以推荐用 encaenca还有一个好处就是如果文件本来就是你要转换的那种编码,它不会报错。 而 iconv 则会报错。

Logo

更多推荐