मैं जावास्क्रिप्ट फ़ाइलों की कंप्रेसिंग कर रहा हूं और कंप्रेसर शिकायत कर रहा है कि मेरी फाइलों में उनका चरित्र है।
मैं इन पात्रों को कैसे खोज सकता हूं और उन्हें हटा सकता हूं?
मैं जावास्क्रिप्ट फ़ाइलों की कंप्रेसिंग कर रहा हूं और कंप्रेसर शिकायत कर रहा है कि मेरी फाइलों में उनका चरित्र है।
मैं इन पात्रों को कैसे खोज सकता हूं और उन्हें हटा सकता हूं?
U+FEFFयूनिकोड कोडपॉइंट है जिसका उपयोग किसी BOM के लिए किया जाता है, लेकिन BOM खुद ही है कि कोडपॉइंट एन्कोडेड है (UTF-8:, 0xEF 0xBB 0xBFUTF-16LE:, 0xFF 0xFEUTF-16BE:, 0xFE 0xFFआदि)। तो विचाराधीन फाइलें UTF-8 एनकोडेड हैं, जो कि कंप्रेसर का पता लगा रहा है जब उन्हें वास्तविक यूनिकोड कोडपॉइंट्स को डिकोड किया जाता है।
जवाबों:
perl -pi~ -CSD -e 's/^\x{fffe}//' file1.js path/to/file2.js
मुझे लगता है कि अगर आपकी फाइल में अन्य utf-8 है तो टूल टूट जाएगा, लेकिन यदि नहीं, तो शायद यह वर्कअराउंड आपकी मदद कर सकता है। (अप्राप्त ...)
संपादित करें : -CSDविकल्प को tchrist की टिप्पणी के अनुसार जोड़ा गया ।
-CSDस्विच के साथ , या PERL_UNICODEएनेवेलेबल सेट के साथ चलना होगा SD।
perl -CSD -pe 's/^\x{feff}//' file.csv<fffe> से <feff> तक के बदलाव पर ध्यान दें।
आप आसानी से उन्हें विम का उपयोग करके निकाल सकते हैं , यहाँ कदम हैं:
1) अपने टर्मिनल में, vim का उपयोग करके फ़ाइल खोलें:
vim file_name
2) सभी BOM वर्णों को निकालें :
:set nobomb
3) फ़ाइल सहेजें:
:wq
उन वर्णों को हटाने का एक और तरीका - विम का उपयोग करना :
vim -b फ़ाइलनाम
अब वे "छिपे हुए" अक्षर दिखाई दे रहे हैं ( <feff>) और उन्हें हटाया जा सकता है।
पिछले उत्तर के लिए धन्यवाद, यहाँ एक मामला है (1) केवल मामले में संस्करण:
sed '1s/^\xEF\xBB\xBF//'
यूनिक्स / लिनक्स पर:
sed 's/\xEF\xBB\xBF//' < inputfile > outputfile
MacOSX पर
sed $'s/\xEF\xBB\xBF//' < inputfile > outputfile
मैक के लिए sed के बाद $ को नोटिस करें।
विंडोज पर
नहीं है सुपर Sed sed का एक उन्नत संस्करण। विंडोज के लिए यह एक स्टैंडअलोन .exe है, जिसका उद्देश्य कमांड लाइन से चलने के लिए है।
$'\xEF\xBB\xBF//'एक बैश फीचर है, विशेष रूप से मैक या ओएसएक्स फीचर नहीं। इस विरोधाभास के कारण, बैश कमांड लाइन को पास करने से पहले वास्तविक बाइट्स में भागने के क्रम को पार्स करेगा sed। आपके sedसंस्करण के आधार पर , यह काम कर सकता है या नहीं भी हो सकता है (हालांकि मुझे यकीन है कि यह OSX उपयोगकर्ताओं के लिए उपयोगी है यह जानने के लिए कि यह उनके लिए बॉक्स से बाहर काम करना चाहिए)।
@ ट्रिपलआई का समाधान मेरे काम नहीं आया। लेकिन फ़ाइल एन्कोडिंग को बदलकर ASCII और फिर से UTF-8 करने की कोशिश ने :-)
मैंने इसके लिए vimgrep का उपयोग किया है
:vim "[\uFEFF]" *
सामान्य खोज खोज कमांड भी
/[\uFEFF]
'फ़ाइल' कमांड दिखाता है कि BOM मौजूद है:
उदाहरण के लिए: 'फ़ाइल myfile.xml' प्रदर्शित करता है: "XML 1.0 दस्तावेज़, UTF-8 यूनिकोड (BOM के साथ) पाठ, बहुत लंबी लाइनों के साथ, CRLF लाइन टर्मिनेटर के साथ"
dos2unix BOM को हटा देगा।
खिड़कियों में आप बैकपोर्टेड इस्तेमाल कर सकते हैं recode से उपयोगिता UnxUtils ।
में उदात्त पाठ आप स्थापित कर सकते हैं हाइलाइटर पैकेज और फिर अपने उपयोगकर्ता सेटिंग्स में नियमित अभिव्यक्ति अनुकूलित।
यहां मैंने संपत्ति \uFEFFके अंत में जोड़ा highlighter_regex।
{
"highlighter_enabled": true,
"highlighter_regex": "(\t+ +)|( +\t+)|[\u2026\u2018\u2019\u201c\u201d\u2013\u2014\uFEFF]|[\t ]+$",
"highlighter_scope_name": "invalid",
"highlighter_max_file_size": 1048576,
"highlighter_delay": 3000
}
डिफ़ॉल्ट पैकेज सेटिंग्स को अधिलेखित करने के लिए फ़ाइल को यहां रखें:
~ / .Config / उदात्त-पाठ -3 / संकुल / प्रयोक्ता / highlighter.sublime-सेटिंग
मैं "dos2unix" टूल के उपयोग का सुझाव देता हूं, कृपया चलाने के लिए परीक्षण करें dos2unix ./thefile.js।
यदि आवश्यक हो तो कई फ़ाइलों के लिए इस तरह का उपयोग करने की कोशिश करें:
for x in $(find . -type f -exec echo {} +); do dos2unix $x ; done
मेरा अभिवादन।
bomstripमेरे मैक पर आसानी से उपलब्ध नहीं था - इसलिए आपको सरल संस्करण देने में समय लग रहा है:find . -type f -exec dos2unix '{}' +
फाइल को बिना कोड सिग्नेचर के सेव करें।
<U+FEFF>, वह यह है<0xEF,0xBB,0xBF>कि UTF8 फ़ाइलों का BOM है, इसलिए आपको शीर्षक बदलना चाहिए। आप उन्हें कैसे निकालना चाहेंगे? जादू परियों द्वारा? कमांड लाइन टूल द्वारा? एक-एक का संपादन करके? नोटपैड ++ बिना BOM के UTF8 में एन्कोडिंग को बदल सकता है। उदाहरण के लिए, "स्ट्रिप बॉम