有关unicode和utf-8编码的python中`%`-format运算符和`str.format()`之间有区别吗?

时间:2011-12-22 11:37:09

标签: python string encoding string-formatting

假设

n = u"Tübingen"
repr(n) # `T\xfcbingen` # Unicode
i = 1 # integer

以下第一个文件抛出

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

当我做n.encode('utf8')时,它有效。

第二种情况在两种情况下都完美无缺。

# Python File 1
#
#!/usr/bin/env python -B
# encoding: utf-8

print '{id}, {name}'.format(id=i, name=n)

# Python File 2
#
#!/usr/bin/env python -B
# encoding: utf-8

print '%i, %s'% (i, n)

由于在文档中鼓励使用format()而不是%格式的运算符,我不明白为什么format()似乎更“残缺”。 format()仅适用于utf8 - 字符串吗?

1 个答案:

答案 0 :(得分:10)

当您没有字符串而string.format个对象时,您正在使用unicode

print u'{id}, {name}'.format(id=i, name=n)

会起作用,因为它会改为使用unicode.format