Emacs को XML फ़ाइलों से BOM न निकालें


8

मैं एक XML फ़ाइल को संपादित करने के लिए Emacs का उपयोग करता हूं जो कि किसी अन्य एप्लिकेशन द्वारा भी पढ़ा जाता है। अन्य एप्लिकेशन के लिए आवश्यक है कि फाइल बाइट-ऑर्डर मार्कर (BOM) से शुरू हो। हालाँकि, Emacs हर बार जब मैं फ़ाइल को संपादित करता है तो BOM को हटा देता है। क्या Emacs को BOM अकेला छोड़ने का एक तरीका है?


यही कारण है कि जब मैं schtasks के लिए एक xml फ़ाइल संपादित करता हूं, तो यह यूनिकोड से यूनिकोड से बड़े एंडियन को एन्कोड करता है और फिर काम नहीं करता है?
js2010

जवाबों:


9

Emacs एक BOM लिखेंगे या नहीं, यह इस बात पर निर्भर करता है कि वह किस कोडिंग सिस्टम का उपयोग कर रहा है। Emacs स्वचालित रूप से कोडिंग प्रणाली का चयन करता है जो किसी फ़ाइल पर जाते समय इसका उपयोग करता है।

आप कोडिंग सिस्टम को utf-8-with-सिग्नेचर में बदल सकते हैं, जो Emacs को BOM लिखने के लिए कहेगा।

किसी फाइल की कोडिंग प्रणाली को बदलने के लिए:

C-x RET r utf-8-with-signature RET

आप उस कोडिंग सिस्टम को सेट कर सकते हैं जो Emacs किसी फ़ाइल चर को सेट करके किसी विशेष फ़ाइल के लिए उपयोग करता है । ठीक मैनुअल सेक्शन 57.3.4 फाइलों में स्थानीय वेरिएबल्स देखें कि यह कैसे करना है।


बहुत बढ़िया, बिल्कुल उसी तरह का जवाब जिसकी मुझे उम्मीद थी! धन्यवाद!
वेब्जॉर्न लोजोसा

5

रिचर्ड होस्किन्स के उत्तर पर फॉलोअप करें: यदि आप कभी भी BOM को emacs द्वारा छिपाया नहीं जाना चाहते हैं, तो आप इस स्निपेट के साथ * -हथ-सिग्नेचर कोडिंग को अक्षम कर सकते हैं:

(setq auto-coding-regexp-alist
  (delete (rassoc 'utf-16be-with-signature auto-coding-regexp-alist)
  (delete (rassoc 'utf-16le-with-signature auto-coding-regexp-alist)
  (delete (rassoc 'utf-8-with-signature auto-coding-regexp-alist)
          auto-coding-regexp-alist))))

BOM U + FEFF, "शून्य-चौड़ाई वाला नॉन-ब्रेकिंग स्पेस" है, और मेरे ईमैक 23.1.1 में एक बॉक्स के रूप में दिखाई नहीं देता है - इसके बजाय, फ़ाइल की शीर्ष रेखा थोड़ी नीचे चली गई है, और एक बॉक्स कभी-कभी पहली पंक्ति के आस-पास दिखाई देता है - लेकिन आप देख सकते हैं कि BOM है, और यदि आवश्यक हो तो इसे हटा दें।


1

एमएसीएस "खुद" को बीओएम के साथ गड़बड़ नहीं करना चाहिए; अगर यह वास्तव में ऐसा कर रहा है, तो यह एमएसीएस "मोड" को लागू करने वाला कोड होना चाहिए जो आप अपनी एक्सएमएल फ़ाइलों को संपादित करने के लिए उपयोग कर रहे हैं जो बीओएम को हटा देता है। चूँकि आप यह नहीं कहते कि वह कौन सा है, मैं आपको केवल उस मोड के लिए प्रलेखन का उल्लेख कर सकता हूं, या आप फ़ाइलों को fundamental-mode(या समान गैर-विनाशकारी मोड) खोल सकते हैं । या कोशिश करें M-x find-file-literallyकि बाकी सब फेल हो जाए।


xml-mode (यानी, sgml-mode) का उपयोग करें, लेकिन यह समस्या कहीं और प्रतीत होती है: अगर मैं फ़ाइल को खोल देता हूं find-file-literallyऔर फिर करता हूं M-x sgml-mode, तो BOM को हटाया नहीं जाता है। चूँकि विशेष वर्ण यूटीएफ -8-एनकोडेड नहीं होते हैं, जब किसी फाइल का शाब्दिक रूप से दौरा किया जाता है, तो यह पता लगाना अच्छा होगा कि अंतर्निहित प्रारूप रूपांतरण और चरित्र कोड रूपांतरण कोड में BOM को हटा दिया गया है।
वेबजॉर्न लजोसा

0

मेरे परीक्षण में, किसी UTF-8फ़ाइल को संपादित करने से एन्कोडिंग नहीं बदलती है और BOM बनी रहती है ( efbb bf)। (nxml मोड)

खैर, यह के बीच भिन्न हो सकते हैं xml-modeऔर nxml-modeया, Emacs के संस्करण (24 बनाम 26)। यह नीचे की तरफ मोड कहता है।

यदि आप एक Emacs एक XML फ़ाइल को यूनिकोड ( UTF-16छोटे एंडियन) में एन्कोड करते हैं , तो यह एन्कोडिंग को UTF-16बड़े एंडियन में बदल देगा । शायद यही वह बात कर रहा है।

लेकिन BOM अभी भी वहाँ है, से बदल दिया fffeहै ffef, और नल भी बाइट के बजाय विषम बाइट पर हैं। आप इसे हेक्साल-मोड में देख सकते हैं।

नमूना xml फ़ाइल। एन्कोडिंग विशेषता xml- मोड या nxml- मोड में सहेजने पर एन्कोडिंग को निर्देशित करती है। BOM की जाँच करने के लिए भविष्य के संस्करण को पैच किया जाएगा।

<?xml version="1.0" encoding="UTF-16"?>
<hi />

ऐसा लगता है जैसे Emacs लेता UTF-16है UTF-16BE, जबकि Windows इसे लेता है UTF-16LE(BE और LE एन्कोडिंग विशेषता के लिए Emacs में काम नहीं करता है)। एन्कोडिंग विशेषता शायद यहाँ की समस्याओं के लिए महत्वपूर्ण है।

इसे पॉवरशेल में सहेजना इसे वापस utf-16le में बदल देगा।

[xml]$xml = get-content test.xml; $xml.save('test.xml')

एन्कोडिंग = "UTF-16LE" और एन्कोडिंग = "UTF-16BE" के साथ, बम को हटा दिया जाता है, जिससे फ़ाइल को emacs में पहचानने योग्य नहीं बनाया जाता है। यह एक पुष्ट बग है जिसे पैच किया जाएगा: http://lists.gnu.org/archive/html/bug-gnu-emacs/2019-05/msg00892.html

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.