场景:
sublime Text是一个非常好的IDE,而且响应速度神马的都非常棒,但是使用过程中会有一些头疼的问题。
最最常见的问题当属编译的时候莫名其妙的报错。
unicode中文是没有办法在sublime Text的console中输出的。
会产生如下提示:
Traceback (most recent call last):
File "E:\project\test\chinese\cn.py", line 6, in <module>
print u"测试"
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)
[Finished in 0.1s with exit code 1]
解决:
示例:最近在优化项目的时候发现有人在项目中写了这么一句话:
sys.setdefaultencoding('utf-8')
不懂有什么用,于是上网查找,发现这个东东就是我一直在寻找的解决方案。只需要将这句话和reload(sys)加入到脚本中,就可以了。
# -*- coding:utf-8 -*- print u"测试"
sublime Text输入上述内容,保存为py文件后使用ctrl+B编译,就会出现“场景”中的报错。
如果这么写,就可以正常输出了:
# -*- coding:utf-8 -*- import sys reload(sys) sys.setdefaultencoding('utf-8') print u"测试"
至于这个东西有什么用,和为什么要reload(sys),后面的参考文献写的很详细了,我就不多说了。到这里算是已经解决了。
不过,我还想更完美一点,就有了如下的内容。
这两句话并非所有项目都需要添加,并且有时候我们未必想要utf-8,所以加入python默认执行环境是不好的。
那应该咋办?
就是每次都加入这两句话,或者说只有用sublime Text调试的时候才使用这两句话。
但是这个 “setdefaultencoding” 挺长啊,懒人,不想输入,咋办?
在sublime Text中输入sys也不会自动提示这个方法(实际上是肯定不存在的,即使sublime有提示,也不会出现这个方法,因为方法会被抹除掉)。
加入自定义snippet就是比较好的解决办法了。
例如,你在sublime Text里面输入 ifmain的时候,就会出现:
回车一下就能自动产生:
那能不能我也自定义一个捏?
可以的,打开 “\path\to\sublime\root\Data\Packages\Python” ,可以看到“if-__name__-==-'__main__'.sublime-snippet”文件。
复制并重命名为“sys-setdefaultencoding.sublime-snippet”(其实名称随意,不会识别的)
然后用sublime Text打开这个文件(^_^),
内容修改为:
保存,就可以了。<snippet> <content><![CDATA[reload(sys) sys.setdefaultencoding('${1:utf-8}$0')]]></content> <tabTrigger>sysset</tabTrigger> <scope>source.python</scope> <description>sys.setdefaultencoding('utf-8')</description> </snippet>
然后就可以输入“sysset”这6个字母输入那两句话(而且默认选中utf-8,可以自行修改):
题外话:
sublime Text版本: 2
python 版本:2.7.11
---------------
参考文献:
1. python中的setdefaultencoding函数使用