`
fengjianquan9527
  • 浏览: 32554 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Eclipse 用PyDev开发中文问题解决

阅读更多
以前一直用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]
2
4
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics