एन्कोडिंग के लिए बैच-कन्वर्ट फ़ाइलें


46

मैं एक कमांड या टूल के साथ अपने एन्कोडिंग (जैसे ANSI-> UTF-8) के लिए निर्देशिका में फ़ाइलों को कैसे बदल सकता हूं?

एकल फ़ाइलों के लिए एक संपादक मदद करता है, लेकिन बड़े पैमाने पर फ़ाइलों को कैसे करना है?


1

जवाबों:


36

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" का उपयोग करते हुए विंडोज कोड पेज समर्थन को देखें। ।


4
इनपुट और आउटपुट के रूप में एक ही फ़ाइल नाम का उपयोग न करें! iconvयदि वे इस आकार से अधिक हो तो फ़ाइलों को 32,768 बाइट्स में बदलना चाहते हैं। जैसा कि वह उस फ़ाइल में लिखता है जिसे वह पढ़ने की कोशिश कर रहा है, वह काम करता है यदि फ़ाइल काफी छोटी है, अन्यथा वह बिना किसी चेतावनी के फ़ाइल को काट देता है ...
Niavlys

1
FYI करें इस प्रश्न को ओएक्सएक्स के साथ टैग किया गया है और यह Yosemite या El Cap पर काम करने वाले सभी-कन्वर्ट कमांड की तरह नहीं दिखता है। Iconv संस्करण एपल्स जहाज --verbose या -o का समर्थन नहीं करता है, और अन्य सिंटैक्स रीडायरेक्टिंग स्टडआउट किसी कारण से काम नहीं करता है और बस इसे नियमित स्टडआउट को भेजता है।
स्कॉट मैकइंटायर

28

शक्तियों के साथ आप ऐसा कुछ कर सकते हैं:

%  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
}

आपके पहले प्रस्ताव के माध्यम से ANSI से UTF में परिवर्तित होने से मेरी
पाठ्य

@Acroneos: तब आपने एक गलती की: इन-फ़ाइल IN.txt है, आउटफिट OUT.txt है ... इस तरह से मूल को अधिलेखित करना असंभव है। यदि आपने IN.txt और OUT.txt के लिए एक ही फ़ाइल नाम का उपयोग किया है, तो आप उस फ़ाइल को अधिलेखित कर देते हैं जिसे आप पढ़ रहे हैं, जाहिर है।
अकीरा

Powershell, BOM के साथ UTF में बदल जाएगी। खोज और iconv बहुत आसान हो सकता है।
परस

6

Newlines पर विकिपीडिया पृष्ठ में रूपांतरण उपयोगिताओं पर एक अनुभाग है ।

ऐसा लगता है कि रूपांतरण के लिए केवल टूल Windows जहाजों का उपयोग करके आपका सबसे अच्छा दांव है:

TYPE unix_file | FIND "" /V > dos_file

3

UTFCast विंडोज के लिए यूनिकोड कनवर्टर है जो बैच मोड का समर्थन करता है। मैं सशुल्क संस्करण का उपयोग कर रहा हूं और इसके साथ काफी सहज हूं।

UTFCast एक यूनिकोड कनवर्टर है जिसकी मदद से आप अपने माउस के एक क्लिक के साथ सभी पाठ फ़ाइलों को UTF एनकोडिंग में बदल सकते हैं। आप मूल फ़ाइलों की निर्देशिका संरचना को बनाए रखते हुए UTF-8, UTF-16 और UTF-32 सहित पाठ फ़ाइलों से भरी निर्देशिका को आउटपुट आउटपुट में बदलने के लिए इसका उपयोग कर सकते हैं। इससे कोई फर्क नहीं पड़ता कि अगर आपकी टेक्स्ट फ़ाइल का कोई दूसरा एक्सटेंशन है, तो UTFCast स्वचालित रूप से टेक्स्ट फाइलों का पता लगा सकता है और उन्हें परिवर्तित कर सकता है।


लगता है कि वे एक ही फ़ोल्डर में परिवर्तित नहीं कर सकते, केवल दूसरे गंतव्य फ़ोल्डर में।
उवे कीम

प्रो संस्करण जगह में रूपांतरण की अनुमति देता है। $ 20 / 3months। रोटेटिंगक्रीव्यू
न्यूटकास्ट- विसर्जन- कॉमपेरिसन.स्पेक्स

ओह, एक्सप्रेस (मुक्त) संस्करण बेकार है - यह केवल "पता लगाता है" बोम के साथ utf-8 !! (हर कोई ऐसा कर सकता है )। केवल प्रो संस्करण है कि ऑटो-रेन्यूज़ हर 3 महीने में $ 20 एक पॉप, ऑटो-डिटेक्ट करेगा। मूल्य एक गैर-उद्यम उपयोगकर्ता के लिए खड़ी है। और खबरदार अगर आप मूल संस्करण को आजमाते हैं, और आपकी फ़ाइल पहले से ही utf-8 (BOM के बिना) है, तो यह कन्वर्टर ASCII के रूप में इसका पता लगाएगा, फिर (इसे फिर से "8" utf-8 में "रूपांतरित" करता है, जिसके परिणामस्वरूप परिणाम हो सकता है) । एक्सप्रेस संस्करण की कोशिश करने से पहले अगर यह खबरदार हो! उनके पास प्रो के लिए एक डेमो संस्करण है जो कोई आउटपुट नहीं पैदा करता है - बेकार IMHO क्यूज खरीदने से पहले परिणामों को सत्यापित नहीं कर सकता है!
शेरलहोमन

3

ओनलाइनर स्वचालित खोज के साथ, खोज का उपयोग करता है

सभी मिलान पाठ फ़ाइलों का वर्ण एन्कोडिंग स्वचालित रूप से पता लगाया जाता है और सभी मिलान पाठ फ़ाइलों को 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बहुतायत




0

नहीं है dos2unixयूनिक्स पर।
विंडोज के लिए एक और समान उपकरण था ( यहां एक और रेफरी )।

मैं यूनिक्स और विंडोज टेक्स्ट फ़ाइलों के बीच कैसे परिवर्तित करूं? कुछ और तरकीबें हैं


2
dos2unixलाइन विराम को परिवर्तित करने के लिए उपयोगी है , लेकिन ओपी चरित्र एनकोडिंग को परिवर्तित करने के लिए देख रहा है।
सोनी सैंटोस

0

आप एन्कोडिंगमास्टर का उपयोग कर सकते हैं । यह मुफ़्त है, इसमें एक विंडोज, लिनक्स और मैक ओएस एक्स संस्करण है और वास्तव में अच्छा काम करता है।


1
आपके द्वारा उल्लिखित वेबसाइट बंद है।
एटिएन डेलावेनेट

0

मेरे उपयोग-मामले में, मुझे स्वचालित इनपुट एन्कोडिंग का पता लगाने की आवश्यकता थी और 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' -- {} \;
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.