Saya menggunakan Python 2.6.5. Kode saya mengharuskan penggunaan tanda "lebih dari atau sama dengan". Ini dia:
>>> s = u'\u2265'
>>> print s
>>> ≥
>>> print "{0}".format(s)
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)`
Mengapa saya mendapatkan kesalahan ini? Apakah ada cara yang tepat untuk melakukan ini? Saya perlu menggunakan .format()
fungsinya.
from __future__ import unicode_literals
di awal file sumber Anda.unicode
Perluunicode
format string.sumber
Sedikit informasi lebih lanjut tentang mengapa itu terjadi.
berfungsi karena
print
secara otomatis menggunakan pengkodean sistem untuk lingkungan Anda, yang kemungkinan diatur ke UTF-8. (Anda dapat memeriksa dengan melakukanimport 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 menyandikans
sebagai ASCII, yang kemudian menghasilkan pengecualian itu. Mengamati:Jadi pada dasarnya itulah mengapa pendekatan ini bekerja:
sumber