Sedikit informasi lebih lanjut tentang mengapa itu terjadi.
>>> s = u'\u2265'
>>> print s
berfungsi karena print
secara 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 format
mencoba 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, format
mencoba untuk menyandikan s
sebagai 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_literals
di awal file sumber Anda.