字符串.format()与使用Unicode数据的%格式

时间:2015-02-15 19:33:02

标签: python python-2.7 unicode utf-8

使用

print("    {:d}). {:s} ({:d})".format(i, account, num_char))

我收到错误:

UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 4: ordinal not in range(128)

但是当我把它改为:

print "    %d). %s (%d)" % (i, account, num_char)

然后没有问题,输出与两个打印相同。

那么第一个表达式出了什么问题,为什么它在第二个表达式中有效?

1 个答案:

答案 0 :(得分:6)

在第一个示例中,您正在调用format str对象传递unicode参数的方法。这会导致错误。你应该使用

print(u"    {:d}). {:s} ({:d})".format(i, account, num_char))

代替。

在第二个中,您正在使用%运算符,当格式或对象为unicode时,该运算符会自动返回unicode。来自docs

  
      
  1. 如果提供的对象或格式是unicode字符串,则生成的字符串也将是unicode。
  2.