दो सवाल यहां। मेरे पास फाइलों का एक सेट है जो आमतौर पर बीओएम के साथ यूटीएफ -8 हैं। मैं उन्हें (आदर्श रूप में जगह में) UTF-8 में बिना BOM के परिवर्तित करना चाहूंगा। ऐसा लगता है कि codecs.StreamRecoder(stream, encode, decode, Reader, Writer, errors)
यह संभाल लेंगे। लेकिन मैं वास्तव में उपयोग पर कोई अच्छा उदाहरण नहीं देखता। क्या इससे निपटने का सबसे अच्छा तरीका होगा?
source files:
Tue Jan 17$ file brh-m-157.json
brh-m-157.json: UTF-8 Unicode (with BOM) text
इसके अलावा, यह आदर्श होगा यदि हम स्पष्ट रूप से जानने वाले विभिन्न इनपुट एन्कोडिंग को संभाल सकते हैं (एएससीआईआई और यूटीएफ -16 देखें)। ऐसा लगता है जैसे यह सब संभव होना चाहिए। क्या कोई ऐसा समाधान है जो किसी भी ज्ञात पायथन एन्कोडिंग और आउटपुट को बिना BOM के UTF-8 के रूप में ले सकता है?
नीचे से 1 प्रस्तावित sol'n संपादित करें (धन्यवाद!)
fp = open('brh-m-157.json','rw')
s = fp.read()
u = s.decode('utf-8-sig')
s = u.encode('utf-8')
print fp.encoding
fp.write(s)
यह मुझे निम्नलिखित त्रुटि देता है:
IOError: [Errno 9] Bad file descriptor
न्यूजफ्लैश
मुझे टिप्पणियों में कहा जा रहा है कि गलती मैं 'r +' / 'r + b' के बजाय मोड 'rw' के साथ फाइल को खोलने की है, इसलिए मुझे अंततः अपने प्रश्न को फिर से संपादित करना चाहिए और हल किए गए भाग को निकालना चाहिए।
r+
मोड के साथ, प्लस अपडेट पढ़ने के लिए अपनी फ़ाइल खोलने की आवश्यकता है।b
इतना भी जोड़ दें कि यह विंडोज पर काम करेगा और साथ ही बिना किसी मजेदार लाइन एंड बिजनेस के। अंत में, आप फ़ाइल की शुरुआत में वापस जाना चाहते हैं और इसे अंत में काट देंगे - कृपया मेरा अद्यतन उत्तर देखें।