पर थोड़ी अधिक जानकारी क्यों होता है, इस ।
>>> s = u'\u2265'
>>> print s
क्योंकि काम करता है print
स्वचालित रूप से आपके पर्यावरण के लिए सिस्टम एन्कोडिंग का उपयोग करता है, जो संभवतः UTF-8 के लिए सेट किया गया था। (आप कर के देख सकते हैं import sys; print sys.stdout.encoding
)
>>> print "{0}".format(s)
विफल हो जाता है क्योंकि format
यह उस प्रकार के एन्कोडिंग से मेल खाने की कोशिश करता है जिसे यह कहा जाता है (मुझे इस पर प्रलेखन नहीं मिला, लेकिन यह वह व्यवहार है जिसे मैंने देखा है)। चूंकि स्ट्रिंग शाब्दिक बाइट स्ट्रिंग्स हैं जो कि अजगर 2 में ASCII के रूप में एन्कोडेड हैं,format
करने की कोशिश करता है s
, जिसके परिणामस्वरूप उस अपवाद का परिणाम होता है। का निरीक्षण करें:
>>> 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
अपनी स्रोत फ़ाइलों की शुरुआत में रखें।