3 min read

Ubuntu 下 vi 打开文件中文乱码?几招教你轻松搞定

前两天刚装好 Ubuntu,兴冲冲地用 vi 打开个中文文件,结果满屏都是乱码,那一瞬间我整个人都懵了。估计很多小伙伴也遇到过这种情况吧?别慌,这事儿真不难解决,今天就跟大家聊聊怎么搞定这个烦人的乱码问题。

先说说为啥会乱码

其实中文乱码说白了就是编码不匹配。你文件用的是一种编码(比如 GBK),但终端和 vi 又认成另一种编码(比如 UTF-8),这不就乱套了嘛。这就像你说普通话,对方听不懂,那肯定是鸡同鸭讲。

方法一:临时救急(打开文件后设置)

如果你只是偶尔遇到这个问题,最快的办法就是在 vi 里手动设置编码:

:set encoding=utf-8
:set fileencoding=utf-8

这样就能临时解决,但下次打开还得重新设,适合应急用。

方法二:一劳永逸(推荐!)

这个才是正解,配置一下 vim 的配置文件,以后再也不用操心乱码的问题了。

先打开配置文件:

vi ~/.vimrc

把下面这些内容贴进去(如果文件里已经有内容就加在最后面):

" 统一使用 UTF-8 编码
set encoding=utf-8
set fileencodings=utf-8,gb2312,gbk,gb18030
set termencoding=utf-8

" 解决菜单乱码
source $VIMRUNTIME/delmenu.vim
source $VIMRUNTIME/menu.vim

" 解决提示信息乱码
language messages zh_CN.UTF-8

这里面fileencodings设置了一堆编码,这样不管你的文件是啥编码,vim 都能自动识别出来,超方便!

方法三:检查终端编码

有时候问题不在 vi,而在终端本身。可以看看当前终端编码:

echo $LANG

正常情况下应该是 en_US.UTF-8 或者 zh_CN.UTF-8。如果不是,可以临时改一下:

export LANG=C.UTF-8

或者永久修改:

echo 'LANG="en_US.UTF-8"' | sudo tee /etc/default/locale
sudo locale-gen en_US.UTF-8

方法四:文件本身编码不对

如果你打开的文件是从 Windows 上传过来的,可能是 GBK 编码。这种情况可以在 vi 里用不同编码重新打开:

:e ++enc=gbk        " 用 GBK 重新打开
:e ++enc=gb18030    " 用 GB18030 重新打开

快速检查清单

如果还不行,按这个顺序排查一下:

检查项 命令
终端编码 echo $LANG
Vim 编码 :set encoding
文件实际编码 file -i filename

说人话的总结

别整那么多花里胡哨的,99% 的情况下,你只需要在 ~/.vimrc 里加这两行就够用了:

set encoding=utf-8
set fileencodings=utf-8,gb2312,gbk,gb18030

搞定!以后再打开中文文件,就不会再看到那些莫名其妙的乱码字符了。这个问题解决起来虽然简单,但第一次遇到的时候还是挺让人抓狂的。希望这篇文章能帮到你,如果还有其他问题,欢迎在评论区交流~