vim编码格式及乱码产生原因
来源:互联网 发布:linux socket编程教程 编辑:程序博客网 时间:2024/04/30 15:07
1vim里面的编码主要跟三个参数有关:enc(encoding), fenc(fileencoding)和fencs(fileencodings)
enc作用是在当前系统中显示,默认值是当前系统编码,一般不改。在中文windows下,系统编码为cp936,enc默认也是cp936。在vim打开文件后,不管当前文件编码为何,将文件以enc的编码格式打开。用命令:set enc查看当前vim的enc是什么值。
fenc是文件编码格式。打开文件后,你可以通过改变fenc后再W来将此文件保存成不同的编码,如:set fenc=utf-8,然后:w就把文件存成utf-8,:set fenc=gb18030,就把文件存成gb18030。
fencs:在打开文件时vim会把fencs中编码的顺序进行解码操作,如果匹配成功,则用该编码解码,并把这种编码设为fenc的值。
2Vim 的多字符编码方式支持是如何工作的
1. Vim 启动,根据 .vimrc 中设置的 encoding 的值来设置 buffer、菜单文本、消息文的字符编码方式。
2. 读取需要编辑的文件,根据 fileencodings 中列出的字符编码方式逐一探测该文件编码方式。并设置 fileencoding 为探测到的,看起来是正确的 字符编码方式。
3. 对比 fileencoding 和 encoding 的值,若不同则调用 iconv 将文件内容转换为encoding 所描述的字符编码方式,并且把转换后的内容放到为此文件开辟的 buffer 里,此时我们就可以开始编辑这个文件了。注意,完成这一步动作需要调用外部的 iconv.dll,你需要保证这个文件存在于 $VIMRUNTIME 或者其他列在 PATH 环境变量中的目录里。
4. 编辑完成后保存文件时,再次对比 fileencoding 和 encoding 的值。若不同,再次调用 iconv 将即将保存的 buffer 中的文本转换为 fileencoding 所描述的字符编码方式,并保存到指定的文件中。同样,这需要调用 iconv.dll。
3乱码产生的原因
当根据 fileencodings 中列出的字符编码方式逐一探测该文件编码方式时,或者fileencodings中没有正确的编码,或者有正确的编码但顺序不对,导致fenc不对,结果vim将不正确的fencd转换为enc。
解决乱码举例:
1. 一个文件,在windows下用gvim打开正常,在linux 用vim打开乱码。
观察:windows 下,查看. encoding(cp936), fileencoding(cp936), termencoding()
linux (乱码), 查看 encoding(utf-8), fileencoding(latin1), termencoding()
分析:是fileencoding 检查出错所致, 但是查看 fileencodings 设置, gvim(windows) 和 vim(linux) 都是
set fileencodings=utf-8,utf-16,cp936,cs-bom,latin-1
可见在linux 下并没有真正检测出文件编码类型为 cp936(虽然它在前面), 而误认为latin-1
解决办法:
1.指定以cp936格式重新加载文件。 e ++enc=cp936
注意。不是:set fileencoding=cp936,因为那只是把文件保存为cp936,打开时逐一探测该文件编码方式,仍旧误判为latin-1
2. 搞定vim 文件编码判定过程, 例如在首行添加一个中文。例如: //中文, 就能正确识别。推荐此法
总之,搞清这三个变量,可解决乱码问题。
- vim编码格式及乱码产生原因
- 【基础知识】字符集编码、Java中编码的格式以及乱码产生的原因
- Google Analytics乱码产生原因及解决方法
- 乱码处理及编码格式
- vim文件编码及乱码处理
- MySQL+PHP产生乱码的原因及解决方法
- MySQL+PHP产生乱码的原因及解决方法
- JSP中文乱码的产生原因及解决方案
- shell和vim中乱码原因及消除办法
- 中文乱码的产生原因
- 如何防止数据库的编码格式跟项目编码格式不一致产生乱码, 怎么让数据库的编码格式跟项目编码格式保持一致
- wamp的初始编码设置及乱码原因
- vim编码格式问题
- vim 设置编码格式
- Tomcat关于encoding编码的默认设置以及乱码产生的原因
- Tomcat关于encoding编码的默认设置以及乱码产生的原因
- 00040.Oracle数据库编码格式查看及乱码解决思路
- servlet中编码格式及设置乱码问题解决
- JSP中forward和redirect有什么区别? 什么时候必须用哪个?
- SPARQLParser11分析
- libmemcached的执行流程
- Git 关联多个远程仓库
- CKEditor在jsp中的应用
- vim编码格式及乱码产生原因
- linux中断相关函数与中断上下文理解
- SHELL脚本编程的常识
- ios播放声音
- 编写搞质量的程序一些技巧总结
- 数组的值按逆序从新存放
- EclEmma Java Code Coverage
- 为什么说互联网金融是对传统软件的一种颠覆
- DoglegMethod——“狗腿”算法(中)