दिलचस्प पोस्ट
मैं अपने सी # प्रोग्राम को 50 मिसे के लिए कैसे सो सकता हूं? मई std :: vector छोटे बफर अनुकूलन का उपयोग कर सकते हैं? एमवीसी वीएस एन-स्तरीय वास्तुकला नेमस्पेस + फ़ंक्शंस बनाम स्थिर तरीके से एक क्लास पर AngularJS – छवि "ऑनलोड" इवेंट डिव पर टैब अनुक्रमणिका डायनेमिक पृष्ठ के लिए सिलेनियम के साथ सीतनिद्रा में होना – @ एलेमेंट कलेक्शन – अजीब हटाना / डालने के व्यवहार पथ तक पहुंच अस्वीकृत है jQuery में गहरे बच्चे का चयन करें पोर्टरडाफ.मॉड का एंड्रॉइड ग्राफिक्स में क्या मतलब है। यह क्या करता है? JDBC का उपयोग कर एसक्यूएल स्क्रिप्ट फ़ाइल को कैसे निष्पादित करें। कौन सा आम तौर पर सबसे अच्छा है – स्ट्रिंग कॉमपिरियन। ऑर्डिनल इग्नेोर कैस या स्ट्रिंग कॉमपारन। इन्वेरियेंट कल्चर इग्नोर केस? कैसे कमान आउटपुट को एक और आदेश के लिए एकाधिक तर्क के रूप में पास करें नेस्टेड रीसाइक्लर देखने की ऊँचाई अपनी सामग्री को लपेट नहीं करती है

पायथन में यूटीएफ -8 फ़ाइल में लिखें

मैं वास्तव में codecs.open function साथ भ्रमित हूँ। जब मैं करता हूं:

 file = codecs.open("temp", "w", "utf-8") file.write(codecs.BOM_UTF8) file.close() 

यह मुझे त्रुटि देता है

यूनिकोडडेकोड एरर: 'एएससीआई' कोडेक स्थिति में बाइट 0 एक्सएफ को डीकोड नहीं कर सकता 0: ऑर्डरिनल नॉन इन रेंज (128)

यदि मैं करता हूँ:

 file = open("temp", "w") file.write(codecs.BOM_UTF8) file.close() 

यह बढ़िया काम करता है।

सवाल यह है कि पहली विधि क्यों विफल होती है? और मैं बॉम कैसे सम्मिलित करूं?

यदि दूसरा तरीका यह करने का सही तरीका है, तो codecs.open(filename, "w", "utf-8") का उपयोग करने का क्या मतलब है?

वेब के समाधान से एकत्रित समाधान "पायथन में यूटीएफ -8 फ़ाइल में लिखें"

मुझे विश्वास है कि समस्या यह है कि codecs.BOM_UTF8 एक बाइट स्ट्रिंग है, न कि यूनिकोड स्ट्रिंग। मुझे संदेह है कि फ़ाइल हैंडलर अनुमान लगाने की कोशिश कर रहा है कि आप वास्तव में क्या मतलब है "मैं यूटीएफ -8-एन्कोडेड पाठ के रूप में यूनिकोड लिख रहा हूं, परन्तु आपने मुझे एक बाइट स्ट्रिंग दी है!"

सीधे बाइट ऑर्डर चिह्न (युनिकोड यू + एफईएफएफ) के लिए यूनिकोड स्ट्रिंग को लिखने की कोशिश करें, ताकि फ़ाइल को यूटीएफ -8 के रूप में ही एन्कोड किया जा सके:

 import codecs file = codecs.open("lol", "w", "utf-8") file.write(u'\ufeff') file.close() 

(यह सही जवाब दे रहा है – बाइट्स ईएफ बीबी बीएफ के साथ फाइल।)

संपादित करें: एन्कोडिंग के रूप में "यूटीएफ -8-एसआईजी" का उपयोग करने के एस। लोटल का सुझाव स्पष्ट रूप से बीओएम को लिखने से बेहतर है, लेकिन मैं यह जवाब यहां छोड़ दूँगा क्योंकि यह बताता है कि इससे पहले कि क्या गलत हो रहा था

निम्नलिखित पढ़ें: http://docs.python.org/library/codecs.html#module-encodings.utf_8_sig

यह करो

 with codecs.open("test_output", "w", "utf-8-sig") as temp: temp.write("hi mom\n") temp.write(u"This has ♭") 

परिणामस्वरूप फ़ाइल UTF-8 अपेक्षित BOM के साथ है

@ एस-लोटे सही प्रक्रिया देते हैं, लेकिन यूनिकोड के मुद्दों पर विस्तार करते हुए, पायथन इंटरप्रिटर अधिक जानकारी प्रदान कर सकता है।

जॉन स्कीट codecs मॉड्यूल के बारे में सही (असामान्य) है – इसमें बाइट स्ट्रिंग्स शामिल हैं:

 >>> import codecs >>> codecs.BOM '\xff\xfe' >>> codecs.BOM_UTF8 '\xef\xbb\xbf' >>> 

एक और नाइट को चुनना, BOM का मानक यूनिकोड नाम है, और इसे इस रूप में दर्ज किया जा सकता है:

 >>> bom= u"\N{ZERO WIDTH NO-BREAK SPACE}" >>> bom u'\ufeff' 

यह unicodedata माध्यम से भी पहुंचा जा सकता है:

 >>> import unicodedata >>> unicodedata.lookup('ZERO WIDTH NO-BREAK SPACE') u'\ufeff' >>> 

मैं utf-8 फ़ाइल में एक अज्ञात वर्णसेट फ़ाइल को बदलने के लिए फ़ाइल * नििक्स कमांड का उपयोग करता हूं

 # -*- encoding: utf-8 -*- # converting a unknown formatting file in utf-8 import codecs import commands file_location = "jumper.sub" file_encoding = commands.getoutput('file -b --mime-encoding %s' % file_location) file_stream = codecs.open(file_location, 'r', file_encoding) file_output = codecs.open(file_location+"b", 'w', 'utf-8') for l in file_stream: file_output.write(l) file_stream.close() file_output.close()