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