问题
Assume that
n = u"Tübingen"
repr(n) # `T\xfcbingen` # Unicode
i = 1 # integer
The first of the following files throws
UnicodeEncodeError: 'ascii' codec can't encode character u'\xfc' in position 82: ordinal not in range(128)
When I do n.encode('utf8')
it works.
The second works flawless in both cases.
# 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)
Since in the documentation it is encouraged to use format()
instead of the %
format operator, I don't understand why format()
seems more "handicaped". Does format()
only work with utf8
-strings?
回答1:
You're using string.format
while you don't have a string but an unicode
object.
print u'{id}, {name}'.format(id=i, name=n)
will work, since it uses unicode.format
instead.
来源:https://stackoverflow.com/questions/8603333/is-there-a-difference-between-format-operator-and-str-format-in-python-r