在 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 不兼容
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/976645.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!