TLDR? प्रयत्न:file = open(filename, encoding='cp437)
क्यों? जब एक का उपयोग करें:
file = open(filename)
text = file.read()
पायथन मान लेता है कि फ़ाइल वर्तमान परिवेश के समान कोडपेज (उद्घाटन पोस्ट के मामले में cp1252) का उपयोग करती है और इसे अपने स्वयं के डिफ़ॉल्ट UTF-8 को डिकोड करने का प्रयास करती है। यदि फ़ाइल में इस कोडपेज (जैसे 0x90) में परिभाषित नहीं किए गए मानों के वर्ण हैं तो हमें यूनिकोडबाउंडइयर मिलता है। कभी-कभी हमें फ़ाइल की एन्कोडिंग का पता नहीं होता है, कभी-कभी फ़ाइल की एन्कोडिंग को पायथन (जैसे cp790) द्वारा अनहेल्ड किया जा सकता है, कभी-कभी फ़ाइल में मिश्रित एनकोडिंग हो सकती है।
यदि इस तरह के चरित्रों को अनधिकृत किया जाता है, तो कोई उन्हें प्रश्नवाचक चिन्ह से बदलने का निर्णय ले सकता है:
file = open(filename, errors='replace')
उपयोग करने के लिए एक और समाधान है:
file = open(filename, errors='ignore')
पात्रों को तो बरकरार रखा गया है, लेकिन अन्य त्रुटियों को भी मुखौटा बनाया जाएगा।
काफी अच्छा समाधान एन्कोडिंग को निर्दिष्ट करना है, फिर भी कोई एन्कोडिंग नहीं है (जैसे cp1252), लेकिन वह जो सभी वर्णों को परिभाषित करता है (जैसे cp437):
file = open(filename, encoding='cp437')
कोडपेज 437 मूल डॉस एन्कोडिंग है। सभी कोड परिभाषित हैं, इसलिए फ़ाइल को पढ़ते समय कोई त्रुटि नहीं होती है, कोई त्रुटि नहीं होती है, वर्ण संरक्षित होते हैं (बिल्कुल बाएं नहीं, लेकिन फिर भी अलग-अलग)।