以前一直用pycharm开发Python。今天心血来潮想在Eclipse上用Python写点东西,发现Eclipse下面PyDev开发有中文的问题(错误:SyntaxError: Non-ASCII character),在文件头写上#coding:utf8也不行,Eclipse的所有环境都配置了UTF8,依然不行。
后来突发奇想会不会是UTF8的BOM的问题导致的?果断将文件用Notepad++打开一看,该文件是以UTF-8无BOM格式编码,于是乎,果断将其改成以UTF-8BOM格式编码,加载到PyDev中一执行,果然OK了。改回原来的,依然报之前的语法错误。
由此推断:Eclipse是不会给UTF-8文件添加BOM,导致中文乱码问题。
补习一下什么是BOM:
BOM(Byte Order Mark):简单说就是一个签名、告诉编辑器当前文档采用何种编码,方便编辑器识别。
UTF8 BOM又叫做UTF8的签名,其实对UTF8没用作用,因为UTF8是以字节为编码单元的,没有字节序的问题。而UTF-16:2个字节 UTF-32:4个字节,这样就会有顺序的问题了,为了支持UTF-16、UTF-32才加上的。
如何使用BOM头
BOM头的删除
对UTF-16, Python将BOM解码为空字串。然而对UTF-8, BOM被解码为一个字符,如例:
>>> codecs.BOM_UTF16.decode( "utf16" ) u''
>>> codecs.BOM_UTF8.decode( "utf8" ) u'\ufeff'
简单的做法是在文件读入时使用
import codecs
f = codecs.open(sys.argv[1],'r', 'utf_8_sig')
即可,具体可以参见[http://docs.python.org/library/codecs.html#module-encodings.utf_8_sig|http://docs.python.org/library/codecs.html#module-encodings.utf_8_sig]
或者:
u.lstrip( unicode( codecs.BOM_UTF8, "utf8" ) )
BOM头的添加
out = file( "someFile", "w" )
out.write( codecs.BOM_UTF8 )
out.write( unicodeString.encode( "utf-8" ) )
out.close()out = file( "someFile", "w" )out.write( codecs.BOM_UTF8 )out.write( unicodeString.encode( "utf-8" ) )out.close()
详细的过程解释可以参见[http://mindprod.com/jgloss/encoding.html|http://mindprod.com/jgloss/encoding.html]
分享到:
相关推荐
eclipse+pydev离线配置python开发环境.pdf
Eclipse和PyDev搭建完美Python开发环境(Windows篇)
Eclipse+PyDev安装及配置详解
eclipse配置pydev的详细文件,有图解。有步骤
python for eclipse 插件,PyDev jdk6+eclipse+python3.6+pydev2.8.2
Eclipse+PyDev配置搭建Python开发环境插件
给eclipse安装PyDev插件后,就可以是使用Eclipse开发Python程序了。
eclipse安装PyDev插件PyDev 7.7.0.zip,打开Eclipse,找到Help菜单栏,进入Install New Software…选项
Eclipse+Pydev构建Python的开发环境
图文详解用eclipse+PyDev配置PythonIDE,自己测试过了,可以编译,pydev拥有智能代码智能提示,比直接用python GUI要方便很多。而且,pydev可以免去开发人员用命令输入startproject startapp等指令。
python+Eclipse+pydev环境搭建,希望对你有帮助
Python+Eclipse+PyDev开发环境搭建及Prophet工具的使用_吐血总结.docx
Python+Eclipse+PyDev开发环境搭建及Prophet工具的使用_吐血总结.pdf
一种比较随意的方法就是把压缩包里面的plugins解压到Eclipse安装目录下对应的目录,features目录也是同样操作
讲述了如何基于Eclipse和PyDev搭建Python开发编译环境,如何使用Prophet时间序列预测工具实现数据分析预测。