Sedikit informasi lebih lanjut tentang mengapa itu terjadi.
>>> s = u'\u2265'
>>> print s
berfungsi karena printsecara otomatis menggunakan pengkodean sistem untuk lingkungan Anda, yang kemungkinan diatur ke UTF-8. (Anda dapat memeriksa dengan melakukan import sys; print sys.stdout.encoding)
>>> print "{0}".format(s)
gagal karena formatmencoba mencocokkan pengodean dari jenis yang dipanggil (saya tidak dapat menemukan dokumentasi tentang ini, tapi ini adalah perilaku yang saya perhatikan). Karena string literal adalah string byte yang dikodekan sebagai ASCII dalam python 2, formatmencoba untuk menyandikan ssebagai ASCII, yang kemudian menghasilkan pengecualian itu. Mengamati:
>>> 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)
Jadi pada dasarnya itulah mengapa pendekatan ini bekerja:
>>> s = u'\u2265'
>>> print u'{}'.format(s)
≥
>>> print '{}'.format(s.encode('utf-8'))
≥
Set karakter sumber ditentukan oleh deklarasi penyandian; itu ASCII jika tidak ada deklarasi pengkodean yang diberikan dalam file sumber ( https://docs.python.org/2/reference/lexical_analysis.html#string-literals )
from __future__ import unicode_literalsdi awal file sumber Anda.