py2exe后运行时出现UnicodeEncodeError的解决方法

今天在用py2exe生成后文件运行时总是在运行到写一个文件时报UnicodeEncodeError: 'ascii' codec can't encode characters in position ... 直接用Python解释器运行没有问题,先是以为是自己将普通的str类型和unicode类型+到一起导致,可用了unicode(str)后还是不行,str.encode('utf8')也不行,这可把我郁闷坏了。
  说句实话,自从用了py2exe就没舒服过,总是经历一个又一个莫名奇妙的bug,尽管后来都被克服了,但很多解决的都不完美,让我对py2exe产生了恐惧感,生怕哪天这玩意儿彻底嗝屁了,之前做的一切努力都白玩了。

在网上用了各种关键字搜索一番发现这个问题似乎很多人都遇到过,某文指出
要在lib里建一个sitecustomize.py文件,然后里面写入

import sys
sys.setdefaultencoding('utf-8')

 然后就好了。

 

自己试了一下,依然无效, 失望之余发现另一篇文章中的代码中多了一行import sitecustomize猛然醒悟,加上这句后终于搞定了。

之后自己又想了一下,觉得这应该是py2exe的一个bug,究竟为什么,我也搞不清楚,不过在lib里自己加一个莫名其妙的库文件总是觉得不爽,在看一下代码,忽然发现其实就是引用sys设定一下默认的编码方式,于是把这个文件删掉,在源码文件中直接加入sys.setdefaultencoding('utf-8')这句代码,当然前提是先import sys,再用py2exe生成文件运行,一切OK,终于可以舒口气了。

 

py2exe真的让我又爱又怕。。。

 

 ps: 发了这篇文章后自己回去又直接用python解释器运行了一把,发现这回直接运行反而不行了,总是报module没有

setdefaultencoding这个属性的错误,网上查了一把,又看了下手册,发现sys.setdefaultencoding()解释里有这么一句: Once used by the site module, it is removed from the sys module's namespace. 看来要想使用这个方法还真得在sitecustomize里用,不过在网上看到了更好的解决方法,reload(sys)一下就好了~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值