linux-linux环境下ANSI转换为UTF-8

使用vim打开linux文本文件,发现乱码。

1. 查询文件的编码格式

在Vim中可以直接查看文件编码,
:set fileencoding
即可显示文件编码格式。

[root@cdh01 2018-05-02]# vim 遗留问题1.txt
1¡¢×îºóÐÞ¸Äʱ¼äͬ²½                                                                                                     
:set fileencoding

[root@cdh01 2018-05-02]# vim 遗留问题1.txt
1¡¢×îºóÐÞ¸Äʱ¼äͬ²½                                                                                                 
  fileencoding=latin1             

发现编码格式为latin1。

2.Vim编码的详细介绍

  Vim和所有的流行文本编辑器一样,Vim可以很好的编辑各种字符编码的文件,这当然包括UCS-2,UTF-8 等流行的Unicode编码方式。
  Vim有四个跟字符编码方式有关的选项,encoding、fileencoding、fileencodings、termencoding (这些选项可能的取值请参考Vim在线帮助:help encoding-names),它们的意义如下:
  (1)encoding:Vim内部使用的字符编码方式,包括Vim的 buffer(缓冲区)、菜单文本、消息文本等。用户手册上建议只在.vimrc中改变它的值,事实上似乎也只有在.vimrc中改变它的值才有意义。
  (2)fileencoding:Vim中当前编辑的文件的字符编码方式,Vim保存文件时也会将文件保存为这种字符编码方式(不管是否新文件都如此),网上是这样介绍的,但是我这样做在.vimrc中定义为utf-8似乎没有作用,只能在打开vim文件时手动设置才会起效,不知道什么原因。
  (3)fileencodings:Vim启动时会按照它所列出的字符编码方式逐一探测即将打开的文件的字符编码方式,并且将fileencoding设置为最终探测到的字符编码方式。因此最好将Unicode编码方式放到这个列表的最前面,将拉丁语系编码方式latin1放到最后面。
  (4)termencoding:Vim所工作的终端(或者Windows的Console窗口)的字符编码方式。这个选项在 Windows下对我们常用的GUI模式的gVim无效,而对Console模式的Vim而言就是Windows控制台的代码页,并且通常我们不需要改变它。

  再来记录一下Vim的多字符编码方式支持是如何工作的。
  (1)Vim启动,根据.vimrc中设置的encoding的值来设置buffer、菜单文本、消息文的字符编码方式。
  (2)读取需要编辑的文件,根据fileencodings中列出的字符编码方式逐一探测该文件编码方式。并设置 fileencoding为探测到看起来是正确的字符编码方式,如果没有找到合适的编码,就用latin-1(ASCII)编码打开。
  (3)对比fileencoding和encoding的值,若不同则调用iconv将文件内容转换为encoding所描述的字符编码方式,并且把转换后的内容放到为此文件开辟的buffer里,此时我们就可以开始编辑这个文件了。
  (4)编辑完成后保存文件时,再次对比fileencoding和encoding的值。若不同,再次调用iconv将即将保存的buffer中的文本转换为fileencoding所描述的字符编码方式,并保存到指定的文件中。

  由于Unicode能够包含几乎所有的语言的字符,而且Unicode的UTF-8编码方式又是非常具有性价比的编码方式(空间消耗比UCS-2小),因此建议encoding的值设置为utf-8。这么做的另一个理由是encoding设置为utf-8时,Vim自动探测文件的编码方式会更准确 (或许这个理由才是主要的;) 。我们在中文Windows里编辑的文件,为了兼顾与其他软件的兼容性,文件编码还是设置为GB2312/GBK比较合适,因此 fileencoding建议设置为chinese(chinese是个别名,在Unix里表示gb2312,在Windows里表示 cp936,也就是GBK的代码页)。  

3.文本编码转换

方案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
[root@cdh01 2018-05-02]# iconv -c -f gb2312 -t utf-8 -o 遗留问题1.txt 遗留问题1.txt 
[root@cdh01 2018-05-02]# vim 遗留问题1.txt

1、最后修改时间同步

"遗留问题1.txt" [noeol] 1L, 28C        

不乱码,解决。

猜你喜欢

转载自blog.csdn.net/m0_37618809/article/details/80747452
今日推荐