在 linux 操作系统中,使用 vim 打开一个文本文件时,出现中文乱码的原因和解决方法

问题场景:

例如:使用 vim 打开一个文件后,中文是乱码


乱码原因:

文件的编码格式 和 vim 用于解析文件内容的编码格式不一致,导致解析出来的内容错误,从而显示乱码。


解决方法:

1、查看文件本身的编码格式

 file -i filename

2、查看 vim 当前是使用哪种编码方式来解析文件内容

encoding 指定的就是 vim 内部使用的编码,即 vim 会根据 encoding 指定的编码方式来解析文件的内容。

# vim 命令模式下输入
set encoding?

显示 vim 使用的是 Latin1 编码,所以 vim 会把文件用 Latin1 来解析,而 Latin1 是单字节编码,只能表示英文字符、阿拉伯数字、还有一些符号,是无法表示中文的,必定乱码。


3、将 vim 的 encoding 设置为 和 文件相同的 utf-8,让 vim 使用和文件编码方式相同的 utf-8 来解析文件内容,从而正常显示。

# vim 的命令模式下执行
set encoding=utf-8

4、修改 vim 配置文件,让配置持久生效,否则下次打开还是乱码

vim 的全局配置文件路径是:/etc/vim/vimrc ,只需要在这个配置文件中加入 就行了,这样所有用户使用vim都会生效。

sudo vim  /etc/vim/vimrc 
set encoding=utf-8 

5、此时已解决 utf-8 编码格式文件使用vim 打开,中文乱码的问题。但是如果下次打开的是一个GBK编码格式的文件,和 vim 当前使用的 UTF-8 也不一样,后续还是可能会乱码。

vim 有一个名为 fileencodings 的指令用于指定多个不同的编码类型,打开某个文件时,vim 会根据文件使用的编码格式来从 fileencodings 指定的列表中选择一个对应的编码方式来解析文件,避免乱码

sudo vim  /etc/vim/vimrc 
set fileencodings=utf-8,gbk,latin1

编码基础知识

计算机为什么需要编码:

计算机只能存储 二进制 0 和 1,所以所有文字在存入计算机前,都必须转换成二进制编码。读取时再根据编码规则,把二进制还原成对应的字符。这个“转换规则”就是 字符编码。


最早的编码规范:ASCII 码

美国最先提出 ASCII,使用一个字节的 7bit 表示字符,可以覆盖到英文字母、阿拉伯数字、基本符号。


各国自建编码时代:万国码

因为其他国家的文字没法用 ASCII 码,所以都各自设计了自己的编码。如:中国的 GB2312 / GBK,存中文的时候使用2字节,存英文字符、阿拉伯数字的时候用1字节,从而实现兼容ASCII。


统一的字符集:Unicode

为了解决“编码混乱”的问题,国际组织推出 Unicode,给世界上每一个字符分配一个唯一编号(码点),从而大家可以根据这个“字符表”去设计具体的编码规则,比较出名的有:

  • UTF-8:使用 1~4 字节存储一个字符,英文、数字使用1字节(兼容ASCII),中文使用3字节存储。
  • UTF-16:使用 2~4 字节存储一个字符,所以就导致了和ASCII 不兼容

posted on 2025-11-26 00:35  背对背依靠  阅读(2)  评论(0)    收藏  举报