मैं एक पायथन टूल पर काम कर रहा हूं जो यूटीएफ -8 और यूटीएफ -16 एन्कोडिंग की फाइलें खोलने में सक्षम होना चाहिए।मैं पाइथन 2.x पर यूटीएफ -16 फाइल कैसे खोल सकता हूं?
def readGridFromPath(self, filepath):
try:
self.readGridFromFile(open(filepath,'r',encoding='utf-8'))
except UnicodeDecodeError:
self.readGridFromFile(open(filepath,'r',encoding='utf-16'))
(readGridFromFile
या तो के माध्यम से पूरा होने तक चलेगा, या बढ़ा: अजगर 3.2 में, मैं निम्नलिखित कोड का उपयोग UTF-8 का उपयोग कर फ़ाइल खोलने का प्रयास करने, फिर वहाँ एक यूनिकोड त्रुटि है, तो UTF-16 के साथ प्रयास करें । एक UnicodeDecodeError
)
हालांकि, जब मैं पायथन 2.x में इस कोड को चलाने के लिए, मैं:
TypeError: 'encoding' is an invalid keyword argument for this function
मैं डॉक्स कि अजगर 2.x के open()
एक encoding
कीवर्ड नहीं है में देखते हैं। क्या इस के आसपास कोई रास्ता है जो मुझे अपना कोड पायथन 2.x संगत बनाने की अनुमति देगा?
import io
def readGridFromPath(self, filepath):
try:
self.readGridFromFile(io.open(filepath, 'r', encoding='utf-8'))
except UnicodeDecodeError:
self.readGridFromFile(io.open(filepath, 'r', encoding='utf-16'))
io.open
विस्तार से here वर्णित है:
अच्छी कॉल, 'io.open' बेहतर विकल्प है। हालांकि, 'codecs.open' के नुकसान वास्तव में" अनुपयुक्त ", IMHO कहने के लिए पर्याप्त महत्वपूर्ण नहीं हैं। –
वैसे, 'कोडेक्स.ओपेन' के बारे में दावा सही ढंग से बीओएम को संभालने में नहीं है, यह गलत है (मैंने कोशिश की)। इसके बारे में बात यह नहीं है कि नई लाइनों को स्वचालित रूप से परिवर्तित करना सच है, हालांकि (लेकिन यह एकमात्र अंतर है)। –
मैंने अभी कोशिश की है - यूटीएफ -16 बीई/ली के लिए यह बहुत बढ़िया काम करता है, लेकिन यूटीएफ 8 के लिए इसके बीओएम (ईबी बीबी बीएफ) को डीकोडेड टेक्स्ट में यू '\ ubeff' के रूप में छोड़ दिया गया है। मुझे स्पष्ट रूप से याद है कि मैंने विंडोज़ पर '.decode()' का उपयोग करके बीओएम के साथ समस्याओं को डीकोड किया था, लेकिन अब मैं इसका परीक्षण नहीं कर सकता। मैंने निष्पक्षता के लिए दावा तय कर लिया है। – toriningen