2010-02-22 13 views
49

में vim के माध्यम से utf-8 में फ़ाइल एन्कोडिंग बदलें, हमारे सर्वर को डेबियन 4 से 5 तक अपडेट करने के बाद ही खटखटाया गया है। हमने यूटीएफ -8 पर्यावरण पर स्विच किया है और अब हमें टेक्स्ट को सही तरीके से मुद्रित करने में समस्याएं हैं ब्राउज़र पर, क्योंकि सभी फाइलें आईएसओ -885 9 -1, एएससीआई आदि जैसे गैर-utf8 एन्कोडिंग में हैंएक स्क्रिप्ट

मैंने कई अलग-अलग स्क्रिप्ट की कोशिश की।

मैंने पहली बार कोशिश की "iconv" है। वह काम नहीं करता है, यह सामग्री को बदलता है, लेकिन फाइलों को एन्कॉन्डिंग अभी भी गैर-utf8 है।

एपीए, एन्कैम, कन्फम और कुछ अन्य टूल्स के साथ एक ही समस्या जिसे मैंने एपीटी-गेट के माध्यम से स्थापित किया था।

फिर मुझे एक पाइथन कोड मिला, जो फ़ाइल के एन्कोडिंग का पता लगाने के लिए कार्डेट यूनिवर्सल डिटेक्टर मॉड्यूल का उपयोग करता है (जो ठीक काम करता है), लेकिन यूनिकोड क्लास या कोडेक क्लास का उपयोग करके इसे सहेजने के लिए utf-8 काम नहीं करता है कोई त्रुटि

फ़ाइल और इसकी सामग्री को यूटीएफ -8 में परिवर्तित करने का एकमात्र तरीका वीआई है।

vi filename.php 
:set bomb 
:set fileencoding=utf-8 
:wq 

Thats यह:

ये कदम मैं एक फ़ाइल के लिए कर रहे हैं। वह एकदम सही काम करता है। लेकिन यह एक स्क्रिप्ट के माध्यम से कैसे चल सकता है। मैं एक स्क्रिप्ट (लिनक्स खोल) लिखना चाहता हूं जो सभी php फ़ाइलों को ले जाने वाली निर्देशिका को घुमाता है, फिर उपरोक्त आदेशों के साथ vi का उपयोग करके उन्हें परिवर्तित कर देता है। के रूप में मैं vi एप्लिकेशन शुरू करने के लिए की जरूरत है, मैं कुछ इस तरह कैसे करना है पता नहीं है:

"vi --run-command=':set bomb, :set fileencoding=utf-8' filename.php"

आशा कोई मेरी मदद कर सकते हैं।

उत्तर

23

यह सबसे आसान तरीका है मैं के बारे में पता कमांड लाइन से आसानी से ऐसा करने के लिए है:

vim +"argdo se bomb | se fileencoding=utf-8 | w" $(find . -type f -name *.php) 

या बेहतर अभी तक अगर फ़ाइलों की संख्या बहुत बड़ी होने की उम्मीद है:

find . -type f -name *.php | xargs vim +"argdo se bomb | se fileencoding=utf-8 | w" 
+3

मुझे पता है कि कि argdo का मतलब नहीं है, लेकिन मैं इस की कोशिश की और यह काम करता है: 'vim +" सेट बम | सेट fileencoding = UTF-8 | wq "$ (खोजने के प्रकार च -name * .php।) ' – NovumCoder

+2

अच्छा। Argdo सिर्फ तर्क सूची में प्रत्येक फ़ाइल के लिए आदेश दोहराता है। –

16

आप एक फ़ाइल में अपने आदेश डाल सकता है, चलो यह script.vim कॉल:

set bomb 
set fileencoding=utf-8 
wq 

तो यो आप जिस फ़ाइल को ठीक करना चाहते हैं उस पर स्क्रिप्ट निष्पादित करने के लिए -S (स्रोत) विकल्प के साथ आप Vim को आमंत्रित करते हैं। फाइलों का एक समूह पर ऐसा करने के लिए आप

find . -type f -name "*.php" -exec vim -S script.vim {} \; 

तुम भी डाल सकता है विम + विकल्प का उपयोग कमांड लाइन पर आदेश कर सकता है, लेकिन मैं इसे इस तरह अधिक पठनीय हो सकता है लगता है।

नोट: मैंने इसका परीक्षण नहीं किया है।

+1

नोट्स सिफारिश से पहले रखा जाना चाहिए। ;) – Zolomon

+1

'बम 'एएससीआईआई संगतता तोड़ता है। [यह उत्तर] देखें (http://stackoverflow.com/questions/5477565/how-to-setup-vim-properly-for-editing-in-utf-8)। – tchrist

3

आप वास्तव में सेट nobomb (बीओएम = बाइट ऑर्डर मार्क) सेट कर सकते हैं, खासकर [विंडोज़] दुनिया में।

उदाहरण के लिए, मेरे पास एक ऐसी स्क्रिप्ट थी जो शुरुआत में बाइट ऑर्डर चिह्न के रूप में काम नहीं करती थी। यह आम तौर पर संपादकों में प्रदर्शित नहीं होता है (यहां तक ​​कि vi में सेट सूची के साथ), या कंसोल पर, इसलिए इसे स्थानांतरित करना मुश्किल होता है।

फ़ाइल इस

#!/usr/bin/perl 
... 

की तरह दिखाई देता लेकिन इसे चलाने के लिए कोशिश कर रहा है, मैं

./filename 
./filename: line 1: #!/usr/bin/perl: No such file or directory 

दिखाया गया है नहीं मिलता है, लेकिन फ़ाइल के शुरू में, 3 बाइट बीओएम है। तो, जहां तक ​​लिनक्स का संबंध है, फाइल # से शुरू नहीं होती है!

समाधान

vi filename 
:set nobomb 
:set fileencoding=utf-8 
:wq 

इस फ़ाइल के शुरू में बीओएम निकाल देता है, यह सही UTF8 बना रही है।

एनबी विंडोज बीओएम का उपयोग टेक्स्ट फ़ाइल को एएनएसआई के बजाए utf8 के रूप में पहचानने के लिए करता है। लिनक्स (और आधिकारिक कल्पना) नहीं करता है।

+0

धन्यवाद नोबॉम्ब स्पष्टीकरण। मैं इस मुद्दे से जूझ रहा था। मैं अंत में वीआईएम का इस्तेमाल किया। उदाहरण के लिए: vim + "set nobomb | set fenc = utf-8 | x" TEST.CSV – jjwdesign