TLDR? চেষ্টা করুন:file = open(filename, encoding='cp437)
কেন? যখন একটি ব্যবহার:
file = open(filename)
text = file.read()
পাইথন ধরে নিয়েছে যে ফাইলটি বর্তমান পরিবেশ হিসাবে একই কোড কোড ব্যবহার করে (খোলার পোস্টের ক্ষেত্রে cp1252) এবং এটির নিজস্ব ডিফল্ট ইউটিএফ -8 এ ডিকোড করার চেষ্টা করে। যদি ফাইলটিতে এই কোডপেজ (0x90 এর মতো) সংজ্ঞায়িত না হওয়া মানগুলির অক্ষর থাকে তবে আমরা ইউনিকোডডেকোডেরর পাই। কখনও কখনও আমরা ফাইলটির এনকোডিং জানি না, কখনও কখনও ফাইলের এনকোডিংটি পাইথন (যেমন সিপি 90৯০ এর মতো) দ্বারা হাতছাড়া করা যায়, কখনও কখনও ফাইলটিতে মিশ্র এনকোডিং থাকতে পারে।
যদি এই জাতীয় অক্ষরগুলি বিনা অপ্রয়োজনীয় হয়, তবে কেউ প্রশ্ন চিহ্ন দ্বারা সেগুলি প্রতিস্থাপনের সিদ্ধান্ত নিতে পারে, এর সাথে:
file = open(filename, errors='replace')
আর একটি কাজ হ'ল:
file = open(filename, errors='ignore')
অক্ষরগুলি অক্ষত রেখে দেওয়া হয়েছে তবে অন্যান্য ত্রুটিগুলিও মুখোশ করা হবে।
বেশ ভাল সমাধানটি এনকোডিং নির্দিষ্ট করা, তবুও কোনও এনকোডিং নয় (যেমন সিপি 1252), তবে যা সমস্ত অক্ষর সংজ্ঞায়িত করেছে (যেমন সিপি 437):
file = open(filename, encoding='cp437')
কোডপেজ 437 হ'ল আসল ডস এনকোডিং। সমস্ত কোড সংজ্ঞায়িত করা হয়েছে, সুতরাং ফাইলটি পড়ার সময় কোনও ত্রুটি নেই, কোনও ত্রুটি মুখোশযুক্ত করা হয়নি, অক্ষরগুলি সংরক্ষণ করা হয়েছে (যথেষ্ট অক্ষত নয় তবে এখনও পৃথকযোগ্য)।