Rss聚合
Posts
Comments

在使用twisted的application模式编程的时候,往往会用到twisted的log系统。该系统会将stdout重载,加入自己的机制,然而该机制对于unicode字符串的编码有一些问题。

比如在程序中print了一条string

s = u’中文’

print s

也许会很惊奇的得到下面这个异常

exceptions.UnicodeEncodeError: 'ascii' codec can't encode character u'\xe8' in
position 60: ordinal not in range(128)

这个异常是因为

当将一个unicode对象传给print时,在内部会将该unicode对象进行一次转换,转换成本地的默认编码(这仅是个人猜测)在python中str和unicode在编码和解码过程中,如果将一个str直接编码成另一种编码,会先把str解码成unicode,采用的编码为默认编码,一般默认编码是anscii,所以在上面示例代码中第一次转换的时候会出错,当设定当前默认编码为'gbk'后,就不会出错了。

在程序的入口处,设置默认python编码,方法如下:
import sys
reload(sys)
sys.setdefaultencoding('gbk')

Trackback URI | Comments RSS

Leave a Reply

京ICP备05029144