त्रुटि संदेश आपको बताता है कि वास्तव में क्या गलत है। गैर-ASCII वर्ण के एन्कोडिंग को जानने के लिए पायथन दुभाषिया की आवश्यकता होती है।
अगर आप U + 00A3 वापस करना चाहते हैं तो कह सकते हैं
return u'\u00a3'
जो यूनिकोड एस्केप सीक्वेंस के माध्यम से शुद्ध ASCII में इस चरित्र का प्रतिनिधित्व करता है। यदि आप शाब्दिक बाइट 0xA3 युक्त बाइट स्ट्रिंग वापस करना चाहते हैं, तो
return b'\xa3'
(जहां पायथन 2 में b
निहित है; लेकिन स्पष्ट रूप से निहित से बेहतर है)।
त्रुटि संदेश में लिंक किया गया PEP आपको ठीक से निर्देश देता है कि पायथन को कैसे बताया जाए "यह फ़ाइल शुद्ध ASCSI नहीं है; यहाँ एन्कोडिंग मैं उपयोग कर रहा हूँ"। यदि एन्कोडिंग UTF-8 है, तो यह होगा
# coding=utf-8
या Emacs- संगत
# -*- encoding: utf-8 -*-
यदि आप नहीं जानते हैं कि इस फाइल को सहेजने के लिए आपका संपादक कौन सा एन्कोडिंग इस्तेमाल करता है, तो इसे हेक्स एडिटर और कुछ गोग्लिंग जैसी चीज़ों से जाँचें। ढेर अतिप्रवाहअक्षरों को सांकेतिक अक्षरों में बदलनाटैग में अधिक जानकारी और कुछ समस्या निवारण युक्तियों के साथ टैग जानकारी पृष्ठ होता है।
इतने सारे शब्दों में, 7-बिट ASCII रेंज (0x00-0x7F) के बाहर, पायथन को अनुमान नहीं लगाया जा सकता है कि बाइट्स का एक क्रम किस स्ट्रिंग का प्रतिनिधित्व करता है। https://tripleee.github.io/8bit#a3 बाइट 0xA3 के लिए 21 संभावित व्याख्याएं दिखाता है और यह केवल विरासत 8-बिट एनकोडिंग से है; लेकिन यह बहु-बाइट एन्कोडिंग का पहला बाइट भी हो सकता है। लेकिन वास्तव में, मुझे लगता है कि आप वास्तव में लैटिन -1 का उपयोग कर रहे हैं, इसलिए आपके पास होना चाहिए
# coding: latin-1
आपके स्रोत फ़ाइल की पहली या दूसरी पंक्ति के रूप में। वैसे भी, बाइट किस चरित्र का प्रतिनिधित्व करने वाला है, इस बारे में ज्ञान के बिना, एक मानव यह अनुमान लगाने में सक्षम नहीं होगा।
एक चेतावनी: coding: latin-1
निश्चित रूप से त्रुटि संदेश को हटा देगा (क्योंकि कोई बाइट अनुक्रम नहीं हैं जो तकनीकी रूप से इस एन्कोडिंग में अनुमत नहीं हैं), लेकिन कोड के व्याख्या किए जाने पर पूरी तरह से गलत परिणाम उत्पन्न हो सकता है यदि वास्तविक एन्कोडिंग कुछ और है। जब आप एन्कोडिंग की घोषणा करते हैं तो आपको वास्तव में फ़ाइल की एन्कोडिंग को पूरी निश्चितता के साथ जानना होता है।