Linux 本编辑器vim显示utf-8文档乱码的解决方法

在Linux系统操作中,Vim是文本编辑器,在使用Vim的时候,居然显示utf-8文档乱码,遇到这种情况要如何解决呢?下面小编就给大家介绍下Linux如何解决Vim显示utf-8文档乱码问题,一起来看看吧。

1.相关基础知识介绍

在Vim中,有四个与编码有关的选项,它们是:fileencodings、fileencoding、encoding和termencoding。在实际使用中,任何一个选项出现错误,都会导致出现乱码。因此,每一个Vim用户都应该明确这四个选项的含义。下面,我们详细介绍一下这四个选项的含义和作用。

(1)encoding

encoding是Vim内部使用的字符编码方式。当我们设置了encoding之后,Vim内部所有的buffer、寄存器、脚本中的字符串等,全都使用这个编码。Vim 在工作的时候,如果编码方式与它的内部编码不一致,它会先把编码转换成内部编码。如果工作用的编码中含有无法转换为内部编码的字符,在这些字符就会丢失。因此,在选择 Vim 的内部编码的时候,一定要使用一种表现能力足够强的编码,以免影响正常工作。

由于encoding选项涉及到Vim中所有字符的内部表示,因此只能在Vim启动的时候设置一次。在Vim工作过程中修改encoding会造成非常多的问题。用户手册上建议只在 .vimrc中改变它的值,事实上似乎也只有在 .vimrc中改变它的值才有意义。如果没有特别的理由,请始终将encoding设置为utf-8。为了避免在非UTF-8的系统如Windows下,菜单和系统提示出现乱码,可同时做这几项设置:

set encoding=utf-8

set langmenu=zh_CN.UTF-8

language message zh_CN.UTF-8

(2)termencoding

termencoding是Vim用于屏幕显示的编码,在显示的时候,Vim会把内部编码转换为屏幕编码,再用于输出。内部编码中含有无法转换为屏幕编码的字符时,该字符会变成问号,但不会影响对它的编辑操作。如果termencoding没有设置,则直接使用encoding不进行转换。

举个例子,当你在Windows下通过telnet登录Linux工作站时,由于Windows的telnet是GBK编码的,而Linux下使用UTF-8编码,你在telnet下的Vim中就会乱码。此时有两种消除乱码的方式:一是把Vim的encoding改为gbk,另一种方法是保持encoding为utf-8,把termencoding改为gbk,让Vim在显示的时候转码。显然,使用前一种方法时,如果遇到编辑的文件中含有GBK无法表示的字符时,这些字符就会丢失。但如果使用后一种方法,虽然由于终端所限,这些字符无法显示,但在编辑过程中这些字符是不会丢失的。

对于图形界面下的GVim,它的显示不依赖TERM,因此termencoding对于它没有意义。在GTK2下的GVim 中,termencoding永远是utf-8,并且不能修改。而Windows下的GVim则忽略termencoding的存在。

(3)fileencoding

当Vim从磁盘上读取文件的时候,会对文件的编码进行探测。如果文件的编码方式和Vim的内部编码方式不同,Vim就会对编码进行转换。转换完毕后,Vim会将fileencoding选项设置为文件的编码。当Vim存盘的时候,如果encoding和fileencoding不一样,Vim就会进行编码转换。因此,通过打开文件后设置fileencoding,我们可以将文件由一种编码转换为另一种编码。但是,由前面的介绍可以看出,fileencoding是在打开文件的时候,由Vim进行探测后自动设置的。因此,如果出现乱码,我们无法通过在打开文件后重新设置fileencoding来纠正乱码。

简而言之,fileencoding是Vim中当前编辑的文件的字符编码方式,Vim保存文件时也会将文件保存为这种字符编码方式 (不管是否新文件都如此)。

(4)fileencodings

编码的自动识别是通过设置fileencodings实现的,注意是复数形式。fileencodings是一个用逗号分隔的列表,列表中的每一项是一种编码的名称。当我们打开文件的时候,VIM按顺序使用fileencodings中的编码进行尝试解码,如果成功的话,就使用该编码方式进行解码,并将fileencoding设置为这个值,如果失败的话,就继续试验下一个编码。

因此,我们在设置fileencodings的时候,一定要把要求严格的、当文件不是这个编码的时候更容易出现解码失败的编码方式放在前面,把宽松的编码方式放在后面。例如,latin1是一种非常宽松的编码方式,任何一种编码方式得到的文本,用latin1进行解码,都不会发生解码失败——当然,解码得到的结果自然也就是理所当然的“乱码”。因此,如果你把latin1放到了fileencodings的第一位的话,打开任何中文文件都是乱码也就是理所当然的了。

以下是网上推荐的一个fileencodings设置:

set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1

其中,ucs-bom是一种非常严格的编码,非该编码的文件几乎没有可能被误判为ucs-bom,因此放在第一位。

utf-8也相当严格,除了很短的文件外(例如许多人津津乐道的GBK编码的“联通”被误判为UTF-8编码的经典错误),现实生活中一般文件是几乎不可能被误判的,因此放在第二位。

接下来是cp936和gb18030,这两种编码相对宽松,如果放前面的话,会出现大量误判,所以就让它们靠后一些。cp936的编码空间比gb18030小,所以把cp936放在gb18030前面。

至于big5、euc-jp和euc-kr,它们的严格程度和cp936差不多,把它们放在后面,在编辑这些编码的文件的时候必然出现大量误判,但这是Vim内置编码探测机制没有办法解决的事。由于中国用户很少有机会编辑这些编码的文件,因此我们还是决定把cp936和gb18030放在前面以保证这些编码的识别。

最后就是latin1了。它是一种极其宽松的编码,以至于我们不得不把它放在最后一位。不过可惜的是,当你碰到一个真的latin1编码的文件时,绝大部分情况下,它没有机会fall-back到latin1,往往在前面的编码中就被误判了。不过,正如前面所说的,中国用户没有太多机会接触这样的文件。

如果编码被误判了,解码后的结果就无法被人类识别,于是我们就说,这个文件乱码了。此时,如果你知道这个文件的正确编码的话,可以在打开文件的时候使用 ++enc=encoding 的方式来打开文件,如:

:e ++enc=utf-8 myfile.txt

上面就是Linux解决Vim显示utf-8文档乱码的方法介绍了,出现该乱码问题后,可通过重新设置fileencodings来解决,希望对你有所帮助。

(0)

相关推荐

  • word文档不能编辑解决方法

    word文档不能编辑解决方法 操作方法 01 方法一.启动Word,新建一个空白文档,执行"插入--〉文件"命令,打开"插入文件"对话框,定位到需要解除保护的文 ...

  • Vista系统中CHM文档无法打开解决方法

    Windows Vista使用有时候有些问题,昨天在网上看到有人问在Windows Vista下为什么以前下的CHM文档无法打开. 步骤/方法 01 下载的CHM文档上选择鼠标右键,选择属性. 02 ...

  • 无法正常打开U盘Word文档的三大解决方法

    一个小小的U盘,在我们日常的工作和学习中扮演者不可或缺的角色.里面大量的Word文件存储在里面,可以随时使用,有很多东西电脑里都没有备份的.那么这个时候我们的u盘,突然无法打开被损坏了或者说word文 ...

  • CentOS终端命令行显示中文乱码的解决方法

    安装CentOS的时候选择了中文,结果在终端不能显示中文,都是乱码,解决方法: 修改/etc/sysconfig/i18n,内容为 复制代码 代码如下: LANG="zh_CN.GB18030" LA ...

  • expression web 4文档乱码解决方法

    expression web 4 文档乱码怎么解决,如下图 文档出现乱码的都是没有声明的页面,可以改变软件编码。 文档-属性 出现对话框,选语言选项-以如下编码方式重新加载文档,下拉菜单选择utf-8

  • 如何修复Excel文档乱码问题

    Excel是现在十分常用的文件类型之一,有些遇到了Excel文档乱码问题,不知道如何修复,接下来小编就给大家介绍一下具体的操作步骤.具体如下:1. 首先第一步根据下图箭头所指,找到并点击Excel文档 ...

  • Ubuntu系统中安装vim与中文帮助文档

    在Windows下面玩的Vim,搬到Ubuntu上面之后感觉Vi用着特别别扭(尤其是剪切板上面的东西无法paste在Vi中...)于是乎...打算把Vi改装成Vim,这样也许就会好多了.废话不多说,开 ...

  • 如何开启Word中的“显示最近的文档”功能?

    相信很多小伙伴在日常办公中都会用到Word,其中的"显示最近的文档"功能如何才能打开呢?方法很简单,下面小编就来为大家介绍.具体如下:1. 打开下图所示窗口后,点击左侧列的&quo ...

  • 怎么让桌面不显示我的文档,删除桌面上我的文档

    怎么删除桌面上我的文档,让桌面不显示我的文档,下面小编介绍两种方法来实现这些操作,第二种方法可以实现桌面资源管理器等所有地方的我的文档的删除 方法一 01 如下图所示,目前小编的电脑上有显示" ...