ข้อมูลเพิ่มเติมเกี่ยวกับสาเหตุที่เกิดขึ้น
>>> s = u'\u2265'
>>> print s
ใช้งานได้เนื่องจากprint
ใช้การเข้ารหัสระบบโดยอัตโนมัติสำหรับสภาพแวดล้อมของคุณซึ่งน่าจะตั้งเป็น UTF-8 (คุณสามารถตรวจสอบได้โดยทำimport sys; print sys.stdout.encoding
)
>>> print "{0}".format(s)
ล้มเหลวเนื่องจากformat
พยายามจับคู่การเข้ารหัสประเภทที่มีการเรียกใช้ (ฉันไม่พบเอกสารเกี่ยวกับสิ่งนี้ แต่นี่เป็นพฤติกรรมที่ฉันสังเกตเห็น) เนื่องจากตัวอักษรสตริงเป็นสตริงไบต์ที่เข้ารหัสเป็น ASCII ใน python 2 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 )
from __future__ import unicode_literals
ที่จุดเริ่มต้นของไฟล์ต้นฉบับของคุณ