碰到一个奇怪的问题,在mac下写了两个py文件,一个乱码,一个不乱码 搞得我七上八下的…
这个问题的缘由,今天开始写数据回溯的转移,从hbase到elasticsearch ,但是总是提示编码问题,我以为是elasticsearch python模块中文解码的问题,狂搜文档,结果尼玛是vim和输入法、粘贴文本造成的编码的问题…
[ruifengyun@devops ~ ]$ cat e.py l.py
#coding:utf-8
print 123
print ‘ˮ���’
#coding:utf-8
print ‘水电费’
print ‘oiuo水电费看见了看见’
[ruifengyun@devops ~ ]$ vim e.
[ruifengyun@devops ~ ]$ vim l.py
[ruifengyun@devops ~ ]$ vim e.py
[ruifengyun@devops ~ ]$ vim e.py
[ruifengyun@devops ~ ]$ vim l.py
[ruifengyun@devops ~ ]$ cat e.py l.py
#coding:utf-8
print 123
print ‘水电费’
#coding:utf-8
print ‘水电费’
print ‘oiuo水电费看见了看见’
如果你的代码执行的时候,中文是乱码,可以用vim看看他的编码的格式
set fenc
~ |~
<aglist][25%][0001,0001] ~/e.py[3][unix][python][66%][0002,0001]
fileencoding=utf-8
解决的方法也很是简单
set fenc=utf-8
在 Vim 中,有四个与编码有关的选项,它们是:fileencodings、fileencoding、encoding 和 termencoding。在实际使用中,任何一个选项出现错误,都会导致出现乱码。因此,每一个 Vim 用户都应该明确这四个选项的含义。下面,我们详细介绍一下这四个选项的含义和作用。
由于 encoding 选项涉及到 Vim 中所有字符的内部表示,因此只能在 Vim 启动的时候设置一次。在 Vim 工作过程中修改encoding 会造成非常多的问题。如果没有特别的理由,请始终将 encoding 设置为 utf-8。
termencoding 是 Vim 用于屏幕显示的编码,在显示的时候,Vim 会把内部编码转换为屏幕编码,再用于输出。内部编码中含有无法转换为屏幕编码的字符时,该字符会变成问号,但不会影响对它的编辑操作。如果 termencoding 没有设置,则直接使用 encoding 不进行转换。
当 Vim 从磁盘上读取文件的时候,会对文件的编码进行探测。如果文件的编码方式和 Vim 的内部编码方式不同,Vim 就会对编码进行转换。转换完毕后,Vim 会将 fileencoding 选项设置为文件的编码。当 Vim 存盘的时候,如果 encoding 和fileencoding 不一样,Vim 就会进行编码转换。因此,通过打开文件后设置 fileencoding,我们可以将文件由一种编码转换为另一种编码。但是,由前面的介绍可以看出,fileencoding 是在打开文件的时候,由 Vim 进行探测后自动设置的。因此,如果出现乱码,我们无法通过在打开文件后重新设置 fileencoding 来纠正乱码。
确实遇到这样的问题,我在vimrc里面都申明了 旧文件的话,需要在当前环境改