甲: 首先查看系统对中文的支持
locale -a | grep zh_CN
乙: 存在3个变量:
1. encoding (内部编码) --该选项使用于缓冲的文本(你正在编辑的文件),寄存器,Vim 脚本文件等等。
2. fileencoding(文件编码) --该选项是vim写入文件时采用的编码类型。
3. termencoding(输出编码) --该选项代表输出到客户终端(Term)采用的编码类型。
进一步解释
encoding—-与系统当前locale相同,所以编辑文件的时候要考虑当前locale,否则要设置的东西就比较多了。
fileencoding—-vim打开文件时自动辨认其编码,fileencoding就为辨认的值。
为空则保存文件时采用encoding的编码
termencoding—-默认空值,也就是输出到终端不进行编码转换。
解决乱码举例:
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
注意。不是se fileencodings=cp936, 那只是把文件保存为cp936
2. 搞定vim 文件编码判定过程, 例如在首行添加一个中文。例如: //中文, 就能正确识别。推荐此法
总之,搞清这三个变量,可解决乱码问题。
今天,从window 上导出了一个书签文件. FreePic2Pdf_bkmk.txt
在linux 下用vim 查看是乱码, 用:e ++enc=cp936还是乱码,
我们查一下这个文件类型
$ file FreePic2Pdf_bkmk.txt
FreePic2Pdf_bkmk.txt: Little-endian UTF-16 Unicode text, with CR line terminators
但是用:e ++enc=utf-16也是乱码. 用 :e ++enc=utf16le 就正常了,可直接编辑. 也可以改变文件编码存储.
用iconv 命令 可以转换文件编码
$ iconv -f utf-16 -t utf-8 FreePic2Pdf_bkmk.txt > new_bkmk.txt
这样, 把utf-16 转成 utf-8 类型, 编辑好后,如果需要,还可以用iconv 把它转回來. 如是解决了乱码问题!
对于linux下用cat 显示的乱码文件,也可以用iconv 转换后显示. 例如:
$ file 00-使用说明.txt
00-使用说明.txt: ISO-8859 text, with CRLF line terminators
这个文件直接用cat 中文显示是乱码,因为是8859文本, 实际上它是cp936编码. 所以可以如下转换后可正确显示.
$ iconv -f windows-936 -t utf8 00-使用说明.txt
windows-936 是通过 iconv -l 查看支持的编码列表查到的.
-------------------------------------------------------
用vim 打开其它编码格式的文件
-------------------------------------------------------
1. 查看文件编码:
$ file 61F13x_ADC.prj
61F13x_ADC.prj: Little-endian UTF-16 Unicode text, with CRLF, CR line terminators
2. 用iconv 查看简写
$ iconv -l
可看出应为: UTF16LE
3. vim 指定转化编码,
例如对此文件, 在vim 中
: e ++enc=utf16le