मैं एक कमांड या टूल के साथ अपने एन्कोडिंग (जैसे ANSI-> UTF-8) के लिए निर्देशिका में फ़ाइलों को कैसे बदल सकता हूं?
एकल फ़ाइलों के लिए एक संपादक मदद करता है, लेकिन बड़े पैमाने पर फ़ाइलों को कैसे करना है?
मैं एक कमांड या टूल के साथ अपने एन्कोडिंग (जैसे ANSI-> UTF-8) के लिए निर्देशिका में फ़ाइलों को कैसे बदल सकता हूं?
एकल फ़ाइलों के लिए एक संपादक मदद करता है, लेकिन बड़े पैमाने पर फ़ाइलों को कैसे करना है?
जवाबों:
Cygwin या GnuWin32 प्रदान यूनिक्स उपकरण की तरह है iconv
और dos2unix
(और unix2dos
)। यूनिक्स / लिनक्स / साइगविन के तहत, आप एएनएसआई के बजाय एन्कोडिंग के रूप में "विंडोज़ -1252" का उपयोग करना चाहेंगे (नीचे देखें)। (जब तक आप जानते हैं कि आपका सिस्टम 1252 के अलावा एक कोडपेज को अपने डिफ़ॉल्ट कोडपेज के रूप में उपयोग कर रहा है, उस स्थिति में आपको iconv से अनुवाद करने के लिए सही कोडपेज बताना होगा।)
एक ( -f
) से दूसरे में बदलें ( -t
):
$ iconv -f windows-1252 -t utf-8 infile > outfile
या एक खोज में सभी और जीत के रूप में:
## this will clobber the original files!
$ find . -name '*.txt' -exec iconv --verbose -f windows-1252 -t utf-8 {} \> {} \;
वैकल्पिक रूप से:
## this will clobber the original files!
$ find . -name '*.txt' -exec iconv --verbose -f windows-1252 -t utf-8 -o {} {} \;
इस साइट पर यह प्रश्न कई बार पूछा गया है, इसलिए यहां "ANSI" के बारे में कुछ अतिरिक्त जानकारी दी गई है। संबंधित प्रश्न के उत्तर में, सीजरबी उल्लेख करता है :
कई एन्कोडिंग हैं जिन्हें विंडोज में "एएनएसआई" कहा जाता है। वास्तव में, एएनएसआई एक मिथ्या नाम है । iconv का अनुमान लगाने का कोई तरीका नहीं है जो आप चाहते हैं।
एएनएसआई एन्कोडिंग विंडोज एपीआई में "ए" फ़ंक्शन द्वारा उपयोग किए गए एन्कोडिंग है ("डब्ल्यू" फ़ंक्शन यूटीएफ -16 का उपयोग करते हैं)। यह किस एन्कोडिंग से मेल खाती है यह आमतौर पर आपके विंडोज सिस्टम की भाषा पर निर्भर करता है। सबसे आम है CP 1252 (जिसे Windows-1252 भी कहा जाता है)। इसलिए, जब आपका संपादक ANSI कहता है, तो इसका अर्थ है "जो भी एपीआई फ़ंक्शन डिफ़ॉल्ट एएनएसआई एन्कोडिंग के रूप में उपयोग करता है", जो कि आपके सिस्टम में उपयोग किया जाने वाला डिफ़ॉल्ट गैर-यूनिकोड एन्कोडिंग है (और इस प्रकार आमतौर पर जो पाठ फ़ाइलों के लिए उपयोग किया जाता है)।
वह पृष्ठ जो इस ऐतिहासिक tidbit ( Microsoft PDF से उद्धृत ) को CP 1252 और ISO-8859-1 की उत्पत्ति पर देता है, एक अन्य बार-बार उपयोग किया जाने वाला एन्कोडिंग:
[...] यह इस तथ्य से आता है कि विंडोज कोड पेज 1252 मूल रूप से एक एएनएसआई ड्राफ्ट पर आधारित था, जो आईएसओ मानक 8859-1 बन गया। हालांकि, आईएसओ मानक में नियंत्रण कोड के लिए आरक्षित सीमा के बिंदुओं को जोड़ने के लिए, विंडोज कोड पेज 1252 और बाद में विंडोज कोड पृष्ठ मूल रूप से आईएसओ 8859-x श्रृंखला पर आधारित हैं जो आईएसओ से भटक गए हैं। आज तक, Microsoft के भीतर और बाहर विकास समुदाय का होना कोई असामान्य बात नहीं है, विंडोज 1252 के साथ 8859-1 कोड पेज को भ्रमित करें, साथ ही साथ "ANSI" या "A" का उपयोग करते हुए विंडोज कोड पेज समर्थन को देखें। ।
iconv
यदि वे इस आकार से अधिक हो तो फ़ाइलों को 32,768 बाइट्स में बदलना चाहते हैं। जैसा कि वह उस फ़ाइल में लिखता है जिसे वह पढ़ने की कोशिश कर रहा है, वह काम करता है यदि फ़ाइल काफी छोटी है, अन्यथा वह बिना किसी चेतावनी के फ़ाइल को काट देता है ...
शक्तियों के साथ आप ऐसा कुछ कर सकते हैं:
% get-content IN.txt | out-file -encoding ENC -filepath OUT.txt
जबकि ENC यूनिकोड, एससीआई, utf8, utf32 जैसा कुछ है। चेकआउट 'हेल्प आउट-फाइल'।
एक निर्देशिका में सभी * .txt फ़ाइलों को utf8 में बदलने के लिए कुछ इस तरह से करें:
% foreach($i in ls -name DIR/*.txt) { \
get-content DIR/$i | \
out-file -encoding utf8 -filepath DIR2/$i \
}
जो DIR2 में प्रत्येक .txt फ़ाइल का एक परिवर्तित संस्करण बनाता है।
संपादित करें: सभी उपनिर्देशिकाओं में फ़ाइलों को बदलने के लिए उपयोग करें:
% foreach($i in ls -recurse -filter "*.java") {
$temp = get-content $i.fullname
out-file -filepath $i.fullname -inputobject $temp -encoding utf8 -force
}
Newlines पर विकिपीडिया पृष्ठ में रूपांतरण उपयोगिताओं पर एक अनुभाग है ।
ऐसा लगता है कि रूपांतरण के लिए केवल टूल Windows जहाजों का उपयोग करके आपका सबसे अच्छा दांव है:
TYPE unix_file | FIND "" /V > dos_file
UTFCast विंडोज के लिए यूनिकोड कनवर्टर है जो बैच मोड का समर्थन करता है। मैं सशुल्क संस्करण का उपयोग कर रहा हूं और इसके साथ काफी सहज हूं।
UTFCast एक यूनिकोड कनवर्टर है जिसकी मदद से आप अपने माउस के एक क्लिक के साथ सभी पाठ फ़ाइलों को UTF एनकोडिंग में बदल सकते हैं। आप मूल फ़ाइलों की निर्देशिका संरचना को बनाए रखते हुए UTF-8, UTF-16 और UTF-32 सहित पाठ फ़ाइलों से भरी निर्देशिका को आउटपुट आउटपुट में बदलने के लिए इसका उपयोग कर सकते हैं। इससे कोई फर्क नहीं पड़ता कि अगर आपकी टेक्स्ट फ़ाइल का कोई दूसरा एक्सटेंशन है, तो UTFCast स्वचालित रूप से टेक्स्ट फाइलों का पता लगा सकता है और उन्हें परिवर्तित कर सकता है।
सभी मिलान पाठ फ़ाइलों का वर्ण एन्कोडिंग स्वचालित रूप से पता लगाया जाता है और सभी मिलान पाठ फ़ाइलों को utf-8
एन्कोडिंग में बदल दिया जाता है :
$ find . -type f -iname *.txt -exec sh -c 'iconv -f $(file -bi "$1" |sed -e "s/.*[ ]charset=//") -t utf-8 -o converted "$1" && mv converted "$1"' -- {} \;
इन चरणों को निष्पादित करने के लिए, एक उप खोल sh
के साथ प्रयोग किया जाता है -exec
, के साथ एक लाइनर चल -c
झंडा, और स्थितीय तर्क के रूप में फ़ाइल नाम गुजर "$1"
साथ -- {}
। बीच में, utf-8
आउटपुट फ़ाइल अस्थायी रूप से नामित होती है converted
।
find
आदेश में इस तरह के फ़ाइल प्रबंधन स्वचालन के लिए बहुत उपयोगी है।
यहाँ के लिए क्लिक करें अधिक find
बहुतायत ।
इस पायथन स्क्रिप्ट का उपयोग करें: https://github.com/goerz/convert_encoding.py यह किसी भी प्लेटफ़ॉर्म पर काम करता है। अजगर 2.7 की आवश्यकता है।
नहीं है dos2unix
यूनिक्स पर।
विंडोज के लिए एक और समान उपकरण था ( यहां एक और रेफरी )।
मैं यूनिक्स और विंडोज टेक्स्ट फ़ाइलों के बीच कैसे परिवर्तित करूं? कुछ और तरकीबें हैं
dos2unix
लाइन विराम को परिवर्तित करने के लिए उपयोगी है , लेकिन ओपी चरित्र एनकोडिंग को परिवर्तित करने के लिए देख रहा है।
आप एन्कोडिंगमास्टर का उपयोग कर सकते हैं । यह मुफ़्त है, इसमें एक विंडोज, लिनक्स और मैक ओएस एक्स संस्करण है और वास्तव में अच्छा काम करता है।
मेरे उपयोग-मामले में, मुझे स्वचालित इनपुट एन्कोडिंग का पता लगाने की आवश्यकता थी और Windows-1250
एन्कोडिंग के साथ बहुत सारी फाइलें थीं , जिसके लिए कमांड file -bi <FILE>
रिटर्न देता है charset=unknown-8bit
। यह मान्य पैरामीटर नहीं है iconv
।
मेरे पास एन्का के साथ सबसे अच्छे परिणाम हैं ।
Txt एक्सटेंशन के साथ सभी फाइलों को utf-8 में बदलें
find . -type f -iname *.txt -exec sh -c 'echo "$1" && enca "$1" -x utf-8' -- {} \;