2010-07-13 16 views
127

Tôi đang sử dụng Python 2.6.5. Mã của tôi yêu cầu sử dụng dấu "nhiều hơn hoặc bằng". Ở đây nó đi:Python: Sử dụng .format() trên chuỗi mã Unicode được loại trừ

>>> 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)` 

Tại sao tôi gặp lỗi này? Có cách nào đúng để làm điều này không? Tôi cần sử dụng chức năng .format().

Trả lời

202

Chỉ cần chắc chuỗi thứ hai cũng là một chuỗi unicode

>>> s = u'\u2265' 
>>> print s 
≥ 
>>> print "{0}".format(s) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
UnicodeEncodeError: 'ascii' codec can't encode character u'\u2265' in position 0: ordinal not in range(128) 
>>> print u"{0}".format(s) 
≥ 
>>> 
+32

@Kit: Nếu bạn muốn tất cả các chữ cái là Unicode (như trong Python 3), hãy đặt 'từ __future__ import unicode_literals' vào đầu tệp nguồn của bạn. – Philipp

+1

Vâng, điều này sẽ giúp bạn nếu bạn quen với% định dạng vì "% s"% u "\ u2265" hoạt động, nhưng "{}" định dạng (u "\ u2265") sẽ ném một ngoại lệ. – Hylidan

+1

một điều đơn giản .. thật là một cơn đau đầu khủng khiếp mà tôi nhận được cho đến khi tôi tìm được chút giác ngộ này .. –

54

unicode s nhu unicode định dạng chuỗi.

>>> print u'{0}'.format(s) 
≥ 
Các vấn đề liên quan