সর্বদা ইউনিকোড থেকে বাইটে এনকোড করুন ।
এই দিক থেকে, আপনি এনকোডিং চয়ন করতে পারেন ।
>>> u"你好".encode("utf8")
'\xe4\xbd\xa0\xe5\xa5\xbd'
>>> print _
你好
অন্য উপায়টি হ'ল বাইটগুলি থেকে ইউনিকোডে ডিকোড করা।
এই দিক থেকে, আপনাকে এনকোডিংটি কী তা জানতে হবে ।
>>> bytes = '\xe4\xbd\xa0\xe5\xa5\xbd'
>>> print bytes
你好
>>> bytes.decode('utf-8')
u'\u4f60\u597d'
>>> print _
你好
এই পয়েন্টটি যথেষ্ট চাপ দেওয়া যাবে না। আপনি যদি ইউনিকোড "হ্যাক-এ-মোল" খেলা এড়াতে চান তবে ডেটা স্তরে কী ঘটছে তা বোঝা গুরুত্বপূর্ণ। এখানে এটি অন্যভাবে ব্যাখ্যা করা হয়েছে:
- একটি ইউনিকোড বস্তু ইতিমধ্যে ডিকোড হয়েছে, আপনি কখনই
decode
এটি কল করতে চান না ।
- একটি বাইস্টেরিং অবজেক্ট ইতিমধ্যে এনকোড হয়েছে, আপনি কখনই
encode
এটিতে কল করতে চান না ।
এখন, .encode
একটি বাইট স্ট্রিং দেখে পাইথন 2 প্রথমে স্পষ্ট করে এটি পাঠ্যে (কোনও unicode
বস্তু) রূপান্তরিত করার চেষ্টা করে । একইভাবে, .decode
একটি ইউনিকোড স্ট্রিং দেখে পাইথন 2 স্পষ্টতই এটিকে বাইটে (কোনও str
বস্তু) রূপান্তরিত করার চেষ্টা করে ।
এই অন্তর্নিহিত রূপান্তরগুলি হ'ল আপনি যখন ফোন করেছেন তখন কেন পাবেন । এর কারণ এনকোডিং সাধারণত টাইপের একটি প্যারামিটার গ্রহণ করে ; প্যারামিটারটি গ্রহণ করার সময় , অন্য কোনও এনকোডিংয়ের সাথে পুনরায় এনকোডিং করার আগে টাইপের কোনও অবজেক্টে একটি অন্তর্নিহিত ডিকোডিং থাকে । এই রূপান্তর একটি ডিফল্ট 'ASCII' ডিকোডার বেছে † , একটি এনকোডার ভিতরে আপনি পাঠোদ্ধারতা ত্রুটি দেয়।Unicode
Decode
Error
encode
unicode
str
unicode
আসলে, পাইথন 3-তে পদ্ধতি str.decode
এবং bytes.encode
এমনকি বিদ্যমান নেই। তাদের অপসারণ এই সাধারণ বিভ্রান্তি এড়ানোর একটি [বিতর্কিত] প্রচেষ্টা ছিল।
† ... বা কোডিং যা sys.getdefaultencoding()
উল্লেখ করেছে; সাধারণত এটি 'আসকি'