পাইথন: ইউনিকোড-পালানো স্ট্রিংয়ে। ফর্ম্যাট () ব্যবহার করা


156

আমি পাইথন ২.6.৫ ব্যবহার করছি। আমার কোডটির জন্য "এর চেয়ে বেশি বা সমান" চিহ্নটি ব্যবহার করা দরকার। এখানে এটা যায়:

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

কেন আমি এই ত্রুটি পেতে পারি? এটি করার কোন সঠিক উপায় আছে? আমার .format()ফাংশনটি ব্যবহার করা দরকার ।

উত্তর:


243

কেবল দ্বিতীয় স্ট্রিংটিকে একটি ইউনিকোড স্ট্রিং করুন

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

40
@ কিট: আপনি যদি সমস্ত আক্ষরিককে ইউনিকোড (পাইথন 3-এর মতো) from __future__ import unicode_literalsহতে চান তবে আপনার উত্স ফাইলগুলির শুরুতে রেখে দিন।
ফিলিপ

1
হ্যাঁ, আপনি যদি এই "% s"% u "" u2265 "কাজ করে% ফর্ম্যাটিং করতে অভ্যস্ত হন তবে এটি আপনাকে পেতে পারে তবে" {} "। ফর্ম্যাট (u" 22 u2265 ") ব্যতিক্রম ছুঁড়ে ফেলবে।
হিলিদান

2
কি সাধারণ জিনিস .. আমি এই
বিদ্যা


5

কেন এমন হয় সে সম্পর্কে আরও কিছু তথ্য ।

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


1
ওহ আমি পাওয়া যায় নি এই পাইথন মধ্যে বোঝার ইউনিকোড বড় সাহায্যের হবে, এবং সাধারণ কম্পিউটার সিস্টেম-এর লেখাটি উপস্থাপনা: nedbatchelder.com/text/unipain.html
LPs
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.