linux -- 文件编码与转换

使用vim进行文档识别(不改变编码)

由于windows系统普遍采用GBK编码,这样导致在windows上编辑的文本转移到采用utf-8编码的linux上后,容易出现乱码现象。

其中的原因是,GBK编码的文件在linux上以utf-8进行解码,会出错。

于是,接下来打算在vim中以fileencodings的方式进行尝试解码,然后用vim的utf-8缓存编码进行显示

操作如下:

1.打开vimrc文件,没有则新建

1
vim ~/.vimrc

2.在vimrc中添加

1
2
set encoding=utf-8
set fileencodings=ucs-bom,utf-8,cp936

知识补充

  • vim 中通过底部命令set fileencoding显示当前编辑文件编码
  • encoding: Vim 内部使用的字符编码方式,包括 Vim 的 buffer (缓冲区)、菜单文本、消息文本等。
  • fileencoding: Vim 中当前编辑的文件的字符编码方式,Vim 保存文件时也会将文件保存为这种字符编码方式 (不管是否新文件都如此)。
  • fileencodings: Vim自动探测fileencoding的顺序列表,启动时会按照它所列出的字符编码方式逐一探测即将打开的文件的字符编码方式,并且将 fileencoding 设置为最终探测到的字符编码方式。
  • ermencoding: Vim 所工作的终端 (或者 Windows 的 Console 窗口) 的字符编码方式。如果vim所在的term与vim编码相同,则无需设置。如其不然,你可以用vim的termencoding选项将自动转换成term 的编码.这个选项在 Windows 下对我们常用的 GUI 模式的 gVim 无效,而对 Console 模式的Vim 而言就是 Windows 控制台的代码页,并且通常我们不需要改变它。

使用iconv进行编码转换

经过尝试,在vim中,通过底部命令set fileencoding=utf-8,即使将原GBK(也称cp936)编码的文档转码为utf-8,在vim中显示也依然存在乱码现象。

问题分析:这种原因可能是在vim中set fileencoding=utf-8 仅仅是改变了文档编码标志,并未真正改变其编码。

基予此,采用iconv进行转码操作。iconv命令是用来转换文件的编码方式的(Convert encoding of given files from one encoding to another),比如它可以将UTF8编码的转换成GB18030的编码,反过来也行。

命令如下:

1
iconv -f {{from_encoding}} {{input_file}} > {{output_file}}

实际上vim的编码自适应显示,底层也是调用了iconv命令