Sylv
2014-05-13 11:49:45 +08:00
第一个报错是因为有一个参数 u'2323' 是 Unicode,所以在格式化字符串的时候会将所有 String 都转换为 Unicode 输出,而 Python2 默认编码是 ascii,用 ascii 编码转换 String 类型的 '中国' 时就出错了,需要用 utf-8 编码才不会出问题:'中国'.decode('utf-8')。
第二个没问题是因为 u'中国'已经是 Unicode 了就不用转换了,而 '2323' 是可以用默认的 ascii 编码转换成 Unicode 的,所以不会出错。
第三个是因为所有参数都是 String 类型的,那么格式化后输出的也是 String 类型,没有涉及到编码转换,所以没有问题。
曾经也被 Python2 的编码坑了很多次,我后来的经验是:代码里所有写的字符串不管中英文都在前面加u,处理为 Unicode;然后所有输入都 decode 为 Unicode,内部处理全用 Unicode,输出时再 encode 为 String。这样可以尽量避免编码出错,以后也更好迁移到 Python3。