碰到一个奇怪的问题,在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看看他的编码的格式

   ~                    |~
<aglist][25%][0001,0001] ~/e.py[3][unix][python][66%][0002,0001]
  fileencoding=utf-8

解决的方法也很是简单

在 Vim 中,有四个与编码有关的选项,它们是:fileencodingsfileencodingencoding 和 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 来纠正乱码。





对Python及运维开发感兴趣的朋友可以加QQ群 : 478476595 !!!
{ 2000人qq大群内有各厂大牛,常组织线上分享及沙龙,对高性能及分布式场景感兴趣同学欢迎加入该QQ群 }

另外如果大家觉得文章对你有些作用!   帮忙点击广告. 一来能刺激我写博客的欲望,二来好维护云主机的费用.
如果想赏钱,可以用微信扫描下面的二维码. 另外再次标注博客原地址  xiaorui.cc  ……   感谢!
暂无相关产品

1则回应给“使用vim做python ide时中文乱码的问题”

  1. 一个自由的人说道:

    确实遇到这样的问题,我在vimrc里面都申明了 旧文件的话,需要在当前环境改

发表评论