我知道在Python 2中,unicode错误是一团糟,但我不明白的是为什么str.format
将它们引入其他工作情况。我遇到了一些unicode角色的问题,测试IDLE让我知道了这个:
>>> s = u'\xef'
>>> print s
ï
>>> print "%s" % s
ï
>>> print '' + s
ï
>>> print '{}'.format(s)
Traceback (most recent call last):
File "<pyshell#2>", line 1, in <module>
print '{}'.format(s)
UnicodeEncodeError: 'ascii' codec can't encode character u'\xef' in position 0: ordinal not in range(128)
似乎str.format
是问题的唯一例子。我猜测以某种方式该函数做了一个关于只传递ascii合适的字符串的错误假设,但我想知道如何处理这个最好的结果是不稳定的。
只有当它是一个unicode字符串时才会出现这种情况,无论是使用实际字符还是代码。作为普通字符串的两种选择都可以正常工作:
>>> s = 'ï'
>>> print '{}'.format(s)
ï
>>> s = '\xef'
>>> print '{}'.format(s)
ï
>>> s = u'ï'
>>> print '{}'.format(s)
Traceback (most recent call last):
File "<pyshell#6>", line 1, in <module>
print '{}'.format(s)
UnicodeEncodeError: 'ascii' codec can't encode character u'\xef' in position 0: ordinal not in range(128)
答案 0 :(得分:2)
请记住,当你说
时print '{}'.format(s)
您尝试使用unicode字符串格式化的字符串是字节(python2 str类型)。 这样:
print u'{}'.format(s)
工作正常。