关于为什么会发生这种情况的更多信息。
>>> s = u'\u2265'
>>> print s
工作,因为print
自动为您的环境使用系统编码,这可能设置为 UTF-8。(你可以通过做检查import sys; print sys.stdout.encoding
)
>>> print "{0}".format(s)
失败是因为format
尝试匹配调用它的类型的编码(我找不到关于此的文档,但这是我注意到的行为)。由于字符串文字是在 python 2 中编码为 ASCII 的字节字符串,因此format
尝试编码s
为 ASCII,然后导致该异常。观察:
>>> s = u'\u2265'
>>> s.encode('ascii')
Traceback (most recent call last):
File "<input>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\u2265' in position 0: ordinal not in range(128)
所以这基本上就是这些方法有效的原因:
>>> s = u'\u2265'
>>> print u'{}'.format(s)
≥
>>> print '{}'.format(s.encode('utf-8'))
≥
源字符集由编码声明定义;如果源文件中没有给出编码声明,则为 ASCII ( https://docs.python.org/2/reference/lexical_analysis.html#string-literals )