2022-02-21 vim 中文乱码问题
在 vim 中出现中文乱码的问题是比较正常的, 现在来分析 vim 中会出现乱码的原因。
vim 变量的意义:
- encoding : vim 内部采用的编码。 一般情况下为 utf-8
- termencoding : 终端采用的编码, 这时我的终端是指 alacritty. 意思是 vim 将处理后的数据发送到终端时的数据编码。 假如 vim 处理得到的数据的编码是 utf-8, 但是终端希望得到的数据为 GB2312 编码, 这时就可以设置 termencoding 为 GB2312, vim 就会将处理好的数据(utf-8 编码的)转换为 GB2312 的后,再发送给终端。
- fileencoding : vim 写文件时需要将内部处理后的数据(utf-8) 转换为文件的储存编码。
vim 中的这三的默认值:
- encoding: 系统当前的 locale, 一般情况下 linux 系统均采用的是 utf-8
- fileencoding: vim 在打开文件时自动辨认其编码, fileencoding 就为辨认的值。 如果为空则保存文件时采用 encoding 指定的编码,如果 encoding 没有修改,则为当前系统的 locale 指定的编码。
- termencoding: 默认为空, 也就是输出到终端不进行编码转换。
对于这样的情况, 系统 locale 是 utf-8 (很多 linux 系统默认的 locale 形式),编辑的文档是 GB2312 或 GBK 形式的(Windows记事本 默认保存形式,大部分编辑器也默认保存为这个形式,所以最常见),终端类型utf-8(也就是假定客户端是putty类的unicode软件)则 vim 打开文档后,encoding=utf-8(locale决定的),fileencoding=latin1(自动编码判断机制不准导致的),termencoding=空(默认无需转换term编码),显示文件为乱码。
解决办法为, 首先要修正 fileencoding 为 cp936 或者 euc-cn (二者一样的,只不过叫法不同),注意修正的方法不是:set fileencoding=cp936,这只是将文件保存为cp936,正确的方法是重新以cp936的编码方式加载文件为:edit ++enc=cp936,可以简写为:e ++enc=cp936。
2022-02-21 vim 中文乱码问题
https://www.supermew.top/2022/02/21/vim-中文乱码问题/