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上的人。
希望这里的解答能够有所帮助。