जैसा कि अन्य लोगों ने कहा है, # coding:
एन्कोडिंग निर्दिष्ट करता है कि स्रोत फ़ाइल को इसमें सहेजा गया है। यहां कुछ उदाहरण दिए गए हैं:
डिस्क पर cp437 (मेरी कंसोल एन्कोडिंग) के रूप में सहेजी गई फ़ाइल, लेकिन कोई एन्कोडिंग घोषित नहीं किया गया
b = 'über'
u = u'über'
print b,repr(b)
print u,repr(u)
आउटपुट:
File "C:\ex.py", line 1
SyntaxError: Non-ASCII character '\x81' in file C:\ex.py on line 1, but no
encoding declared; see http://www.python.org/peps/pep-0263.html for details
# coding: cp437
जोड़ा के साथ फ़ाइल का उत्पादन :
über '\x81ber'
über u'\xfcber'
सबसे पहले, पायथन को एन्कोडिंग का पता नहीं चला और उसने गैर-एएससीआईआई चरित्र के बारे में शिकायत की। एक बार जब यह एन्कोडिंग को जानता था, बाइट स्ट्रिंग को बाइट्स मिला जो वास्तव में डिस्क पर था। यूनिकोड स्ट्रिंग के लिए, अजगर, \ x81 पढ़ जानता था कि cp437 में है कि एक था ü , और के लिए यूनिकोड कोडपॉइंट में डीकोड ü जो U + 00FC है। जब बाइट स्ट्रिंग मुद्रित किया गया था, तो पायथन ने 81
कंसोल को सीधे हेक्स मान भेजा । जब यूनिकोड स्ट्रिंग मुद्रित किया गया था, तो पायथन ने c4437 के रूप में मेरे कंसोल एन्कोडिंग का सही पता लगाया और यूनिकोड ü को cp437 के लिए ü के लिए अनुवादित किया ।
यहाँ क्या घोषित फ़ाइल और UTF-8 में सहेजे जाने के साथ होता है:
├╝ber '\xc3\xbcber'
über u'\xfcber'
UTF-8 में, ü हेक्स बाइट्स के रूप में एन्कोड किया गया है C3 BC
, इसलिए बाइट स्ट्रिंग में उन बाइट्स होते हैं, लेकिन यूनिकोड स्ट्रिंग पहले उदाहरण के समान है। अजगर ने दो बाइट्स पढ़े और इसे सही ढंग से डिकोड किया। पायथन ने बाइट स्ट्रिंग को गलत तरीके से मुद्रित किया, क्योंकि इसने दो यूटीएफ -8 बाइट्स को ü सीधे मेरे cp3737 कंसोल पर दर्शाया।
यहाँ फ़ाइल cp437 घोषित है, लेकिन UTF-8 में सहेजी गई है:
├╝ber '\xc3\xbcber'
├╝ber u'\u251c\u255dber'
बाइट स्ट्रिंग को अभी भी डिस्क (UTF-8 हेक्स बाइट्स C3 BC
) पर बाइट्स मिला है , लेकिन एकल UTF-8-एन्कोडेड वर्ण के बजाय दो cp437 वर्णों के रूप में उनकी व्याख्या की है। उन दो पात्रों को जहां यूनिकोड कोड बिंदुओं में अनुवादित किया गया है, और सब कुछ गलत तरीके से प्रिंट करता है।
# coding: utf8
पर्याप्त है, के लिए कोई ज़रूरत नहीं है-*-