解决sublime Text编译python中文脚本出错

场景:

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),后面的参考文献写的很详细了,我就不多说了。

到这里算是已经解决了。

不过,我还想更完美一点,就有了如下的内容。


添加 snippet:

这两句话并非所有项目都需要添加,并且有时候我们未必想要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函数使用

2. Python 设置系统默认编码




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值