কেন এমন হয় সে সম্পর্কে আরও কিছু তথ্য ।
>>> s = u'\u2265'
>>> print s
কাজ করে কারণ print
স্বয়ংক্রিয়ভাবে আপনার পরিবেশের জন্য সিস্টেম এনকোডিং ব্যবহার করে, যা সম্ভবত ইউটিএফ -8 এ সেট করা হয়েছিল। (আপনি এটি পরীক্ষা করে দেখতে পারেন import sys; print sys.stdout.encoding
)
>>> print "{0}".format(s)
ব্যর্থ হয় কারণ format
এটি যে ধরণের কল করা হয়েছিল তার এনকোডিংয়ের সাথে মেলে চেষ্টা করে (এটি সম্পর্কে আমি কোনও ডকুমেন্টেশন খুঁজে পাইনি, তবে এটি এমন আচরণ যা আমি লক্ষ্য করেছি)। যেহেতু স্ট্রিং লিটারালগুলি পাইথন 2 এ ASCII হিসাবে এনকোডযুক্ত বাইট স্ট্রিংগুলি 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/references/lexical_analysis.html#string-literals )
from __future__ import unicode_literals
হতে চান তবে আপনার উত্স ফাইলগুলির শুরুতে রেখে দিন।