क्या मुझे पायथन 3 में एन्कोडिंग घोषणा का उपयोग करना चाहिए?


114

पायथन 3 डिफ़ॉल्ट रूप से स्रोत-कोड फ़ाइलों के लिए UTF-8 एन्कोडिंग का उपयोग करता है। मैं अभी भी हर स्रोत फ़ाइल की शुरुआत में एन्कोडिंग घोषणा का उपयोग करना चाहिए? पसंद# -*- coding: utf-8 -*-

जवाबों:


112

क्योंकि डिफ़ॉल्ट है UTF-8, आप केवल यदि आप अन्य उपकरणों पर भरोसा करते हैं (अपने आईडीई या पाठ संपादक की तरह) है कि जानकारी का उपयोग करने के उस घोषणा का उपयोग करने के लिए जब आप डिफ़ॉल्ट से विचलित की जरूरत है, या।

दूसरे शब्दों में, जहां तक ​​पायथन का संबंध है , केवल जब आप एक एन्कोडिंग का उपयोग करना चाहते हैं जो भिन्न होता है तो आपको उस घोषणा का उपयोग करना होगा।

अन्य उपकरण, जैसे कि आपके संपादक, समान सिंटैक्स का समर्थन कर सकते हैं, यही वजह है कि वाक्य रचना में पीईपी 263 विनिर्देश काफी लचीलेपन के लिए अनुमति देता है (यह एक टिप्पणी होनी चाहिए, पाठ codingवहां होना चाहिए, :या तो एक =चरित्र या वैकल्पिक व्हाट्सएप द्वारा होना चाहिए , आदि) एक मान्यता प्राप्त कोडेक द्वारा पीछा किया)।

ध्यान दें कि यह केवल उस पर लागू होता है कि पायथन स्रोत कोड को कैसे पढ़ता है । यह उस कोड को निष्पादित करने के लिए लागू नहीं होता है, इसलिए न कि मुद्रण, फ़ाइलों को खोलने, या किसी भी अन्य I / O संचालन बाइट्स और यूनीकोड ​​के बीच अनुवाद करते हैं। पायथन, यूनिकोड, और एन्कोडिंग के बारे में अधिक जानकारी के लिए, मैं आपको दृढ़ता से पाइथन यूनिकोड HOWTO , या नेड बैचेल्ड द्वारा बहुत गहन व्यावहारिक यूनिकोड बात पढ़ने के लिए आग्रह करता हूं ।


28
# -*- coding: utf-8 -*-अभी भी उपयोगी कुछ संपादकों के लिए स्विच करने के लिए के लिए हो सकता है की उम्मीद एन्कोडिंग स्रोत फ़ाइल को संपादित करते समय।
पेजर

1
@pepr एक बाइट ऑर्डर मार्क ही कर सकता है, नहीं?
एंडोलिथ

12
@endolith: UTF-8 बीओएम इस धरती पर एक abomination माइक्रोसॉफ्ट .. देखें द्वारा आगे लाया है en.wikipedia.org/wiki/Byte_order_mark#UTF-8
मार्टिन पीटर्स

1
@MartijnPieters आपका लिंक आपके साथ सहमत नहीं दिखता है
endolith

2
@endolith: नहीं, WP लेख केवल पृष्ठभूमि को सारांशित करता है, यह मेरा अपना विचार है कि यह एक घृणा है। BOM का बिंदु बाइट ऑर्डर रिकॉर्ड करना है (इसलिए नाम, बाइट ऑर्डर मार्क)। UTF-8 में कोई बाइट ऑर्डर कन्फ्यूजन नहीं है, इसमें केवल UTF-16 और UTF-32 में ही फंक्शन है। मान पहले से ही फिर से शून्य-चौड़ाई वाला नो-ब्रेक स्पेस कैरेक्टर (आसान, आकस्मिक मुद्रण के रूप में पूरी तरह से अदृश्य आउटपुट के साथ समाप्त हो जाता है), फिर से उपयोग करना एक जादू निरंतर होना गलत है, मेरे विचार में।
मार्टिन पीटर्स

6

नहीं, यदि:

  • संपूर्ण परियोजना केवल उसी का उपयोग करती है UTF-8, जो डिफ़ॉल्ट है।
  • और आपको यकीन है कि आपके आईडीई टूल को प्रत्येक फ़ाइल में एन्कोडिंग घोषणा की आवश्यकता नहीं है।

यदि हाँ

  • आपकी परियोजना विभिन्न एन्कोडिंग पर निर्भर करती है
  • या कई एनकोडिंग पर निर्भर करता है।

बहु-एनकोडिंग परियोजनाओं के लिए:

यदि कुछ फ़ाइलों को इनकोड किया गया है non-utf-8, तो आपके लिए इन एन्कोडेड के UTF-8लिए एन्कोडिंग घोषणा को भी जोड़ना चाहिए, क्योंकि सुनहरा नियम हैExplicit is better than implicit.

संदर्भ:

  • PyCharm को उस घोषणा की आवश्यकता नहीं है:

Pycharm में विशिष्ट फ़ाइल के लिए एन्कोडिंग कॉन्फ़िगर करना

  • vim को उस घोषणा की आवश्यकता नहीं है, लेकिन:
# vim: set fileencoding=<encoding name> :
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.