天堂的另一角

天堂魷魚的原创技术博客。所謂兼容並包,無奇不有。

 

Python 2.x中使用字符串的format()方法的注意事项

Python 3中,字符串的格式化将会采用新的format()方法,以替代现行的C风格的%(百分号)操作符。例如:

"表达式 %s 的计算结果是: %d" % ("1 + 1", 2)

在Python 3中应写为:

"表达式 {} 的计算结果是: {:d}".format("1 + 1", 2)

为了实现Python 2到Python 3的平滑过渡,在Python 2.6以后的版本中,也为字符串提供了该方法并鼓励大家使用,以代替惯用的%操作符。

问题是,如果你的程序需要处理非ASCII码字符,例如中文、日文、韩文的话,那么你在使用format()方法时将会被提示以下错误:

UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-9: ordinal not in range(128)

原因是在Python 2.x中,字符串的默认编码是ascii码,无法直接处理中文等超出ascii码范围的文字。

解决方法是,在python的安装目录中找到sitecustomize.py文件,通常是在site-packages目录下,如果没有就自己建一个。我的python 2.7在mac下该文件的路径为

/Library/Python/2.7/site-packages/

然后确保文件中包含以下内容:

import sys

sys.setdefaultencoding('utf-8')

这样在运行程序时就可以正确处理Unicode字符串的format()方法了。但是如果程序需要部署到客户端上,那么就很难保证每台机器上都按以上方法设置了。这样该怎么办呢?

注意,直接在程序里是无法调用setdefaultencoding()方法的,因为该方法在python启动后就会被自动删除掉。如果实在需要调用的话,可以使用以下方法:

import sys

reload(sys)

sys.setdefaultendoding('utf-8')

即可。

 

有不少人因此而觉得format()方法不如%操作符,其实大可不必。在Python 3中,所有的字符串将完全使用unicode编码,这个问题也就将不复存在了。以上的方法只是权宜之计,仅适用于那些喜欢尝鲜,或希望将来代码能够顺利移植到Python 3上的人。

希望这里的解答能够有所帮助。

posted on 2011-10-18 20:23 Addone 阅读(4354) 评论(1)  编辑 收藏 引用 所属分类: 软件开发

评论

# re: Python 2.x中使用字符串的format()方法的注意事项 2014-04-10 16:50 admin

定用了,谢谢  回复  更多评论   

只有注册用户登录后才能发表评论。

导航

统计

公告


Addone,又名:天堂鱿鱼。
这里是我的技术博客。其他文章
作为“杂感”分类存档。
我的新思想主要发往新站:
幻想园
幻想园

欢迎光临

Linux注册用户

feedsky
抓虾
google reader
bloglines

联系方式




My status

常用链接

留言簿(11)

随笔分类(99)

随笔档案(69)

相册

友情链接

推荐站点

搜索

积分与排名

最新评论

阅读排行榜