कनवर्ट करें पाठ फ़ाइल एन्कोडिंग


15

मैं अक्सर पाठ फ़ाइलों (जैसे कि मेरी मूल भाषा, फ़ारसी में उपशीर्षक फ़ाइलें ) के साथ चरित्र एन्कोडिंग समस्याओं का सामना करता हूं । इन फ़ाइलों को विंडोज पर बनाया गया है, और एक अनुपयुक्त एन्कोडिंग (ANSI प्रतीत होता है) के साथ बचाया गया है, जो इस तरह से अस्पष्ट और अपठनीय दिखता है:

यहां छवि विवरण दर्ज करें

विंडोज में, कोई भी आसानी से नोटपैड ++ का उपयोग करके इसे आसानी से यूटीएफ -8 में एन्कोडिंग में बदल सकता है, जैसे नीचे:

यहां छवि विवरण दर्ज करें

और सही पठनीय परिणाम इस प्रकार है:

यहां छवि विवरण दर्ज करें

मैंने GNU / Linux पर समान समाधान के लिए बहुत कुछ खोजा है, लेकिन दुर्भाग्य से सुझाए गए समाधान (जैसे यह प्रश्न ) काम नहीं करते हैं। सबसे अधिक, मैंने देखा है कि लोग सुझाव देते हैं iconvऔर recodeलेकिन मुझे इन उपकरणों के साथ कोई भाग्य नहीं मिला है। मैंने कई आदेशों का परीक्षण किया है, जिसमें अनुसरण भी शामिल है, और सभी विफल रहे हैं:

$ recode ISO-8859-15..UTF8 file.txt
$ iconv -f ISO8859-15 -t UTF-8 file.txt > out.txt
$ iconv -f WINDOWS-1252 -t UTF-8 file.txt > out.txt 

इनमें से कोई भी काम नहीं किया!

मैं Ubuntu-14.04 का उपयोग कर रहा हूं और मैं एक सरल समाधान (या तो GUI या CLI) की तलाश कर रहा हूं जो कि Notepad ++ की तरह ही काम करता है।

"सरल" होने का एक महत्वपूर्ण पहलू यह है कि स्रोत एन्कोडिंग को निर्धारित करने के लिए उपयोगकर्ता की आवश्यकता नहीं है; बल्कि स्रोत एन्कोडिंग को उपकरण द्वारा स्वचालित रूप से पता लगाया जाना चाहिए और उपयोगकर्ता द्वारा केवल लक्ष्य एन्कोडिंग प्रदान की जानी चाहिए। लेकिन फिर भी, मुझे एक ऐसे कार्य समाधान के बारे में जानकर खुशी होगी, जिसके लिए स्रोत एन्कोडिंग प्रदान करने की आवश्यकता होती है।

यदि किसी को विभिन्न समाधानों की जांच के लिए परीक्षण-मामले की आवश्यकता है, तो उपरोक्त उदाहरण इस लिंक के माध्यम से सुलभ है ।


2
प्रयास करें: vim '+set fileencoding=utf-8' '+wq' file.txt
मोरू

फ़ारसी होना चाहिए, iso-639लेकिन ऐसा लगता नहीं है कि iconvया तो उपलब्ध है recode। कम से कम, मैं इसे आउटपुट में नहीं देखता iconv -l
टेराडॉन

@ एमरू मैंने आपके सुझाव का परीक्षण किया vimलेकिन यह कारगर नहीं हुआ।
सैयद मोहम्मद

@ सैयद मोहम्मद अभी भी वही दिख रहे थे?
मूरू

@ मम यप! कोई परिवर्तन नहीं होता है।
मोहम्मद

जवाबों:


12

फारसी पाठ के साथ इन Windows फ़ाइलों में इनकोड विंडोज-1256 । इसलिए इसे ओपी द्वारा आजमाए गए समान कमांड के द्वारा अलग किया जा सकता है, लेकिन विभिन्न वर्णों के साथ। अर्थात्:

recode Windows-1256..UTF-8 <Windows_file.txt > UTF8_file.txt
(मूल पोस्टर की शिकायतों पर निंदा की; टिप्पणियाँ देखें)

iconv -f Windows-1256 Windows_file.txt > UTF8_file.txt

यह मानता है कि LANG पर्यावरण चर एक UTF-8 स्थान पर सेट है। किसी भी एन्कोडिंग में परिवर्तित करने के लिए (UTF-8 या अन्यथा), वर्तमान लोकेल की परवाह किए बिना, कोई भी कह सकता है:

iconv -f Windows-1256 Windows_file.txt -t ${output_encoding} > ${output_file}

मूल पोस्टर टेक्स्ट रिकोडिंग टूल्स (रिकोड, आइकनव) के शब्दार्थ से भी भ्रमित है। स्रोत एन्कोडिंग ( स्रोत.. या -f) के लिए किसी को एन्कोडिंग को निर्दिष्ट करना होगा जिसके साथ फ़ाइल सहेजी गई है (प्रोग्राम द्वारा जिसने इसे बनाया है)। कुछ (भोले) अनुमान नहीं है कि कार्यक्रमों में mojibake पात्रों पर आधारित है जो इसे पढ़ने के लिए (लेकिन असफल) प्रयास करते हैं। फ़ारसी पाठ के लिए ISO-8859-15 या WINDOWS-1252 या तो कोशिश करना स्पष्ट रूप से एक गतिरोध था: इन एन्कोडिंगों में केवल कोई फ़ारसी पत्र शामिल नहीं है।


@ सैयद मोहम्मद: अब स्पष्ट रूप से निर्दिष्ट आदेशों के साथ।
इंनिस मिसी

धन्यवाद! दूसरे कमांड (एक का उपयोग कर iconv) ने काम किया। लेकिन पहले एक (का उपयोग recode) सही ढंग से काम नहीं किया और उत्पादन अभी भी अस्पष्ट था। अपने उत्तर को केवल iconvकमांड में शामिल करें और मैं इसे उत्तर के रूप में चिह्नित करूंगा।
मोहम्मद

1
लैंग चर सेटिंग से मुक्त होने के लिए, कोई भी ऐसा कर सकता है: iconv -f WINDOWS-1256 -t UTF-8 in.txt > out.txtजिसे मैंने परीक्षण किया और काम किया। तो इस तरह से अपने आदेश को संपादित करना एक अच्छा विचार हो सकता है।
सैयद मोहम्मद

मैंने वर्किंग कमांड पर आधारित एक उपयोगी स्क्रिप्ट लिखी जिसे मैंने यहां एक अन्य उत्तर में समझाया है। मुझे उम्मीद है कि यह अन्य फारसी लिनक्स-उपयोगकर्ताओं की मदद करेगा क्योंकि यह मेरी बहुत मदद करता है।
सय्यद मोहम्मद

@ कारेल: धन्यवाद, "शिकायत" एक क्रिया है - वाक्यांश को अनियमित रूप से लिखा गया था।
इंकिस मृसी

1

इसके अलावा iconv, जो अपने आप में या किसी स्क्रिप्ट में एक बहुत ही उपयोगी उपकरण है, वास्तव में एक सरल समाधान है जो मैंने पाया कि ग्रीक वर्णमाला (विंडोज -1253 + आईएसओ-8859-7) के लिए भी यही समस्या है।

तुम सब करने की ज़रूरत पाठ फ़ाइल को खोलने के लिए है Gedit के "ओपन" संवाद के माध्यम से और उस पर डबल-क्लिक करके नहीं । संवाद बॉक्स के निचले भाग में एन्कोडिंग के लिए एक ड्रॉप-डाउन है, जो "स्वचालित रूप से पता लगाया गया " पर सेट है । इसे "Windows-125x" या अन्य उपयुक्त कोडसेट में बदलें और टेक्स्ट Gedit में पूरी तरह से पढ़ने योग्य होगा। तब आप इसे UTF-8 एन्कोडिंग का उपयोग करके सहेज सकते हैं, बस यह सुनिश्चित करने के लिए कि आपके पास भविष्य में फिर से वही मुद्दा नहीं होगा ...


1

समस्या के पूरक समाधान के रूप में, मैंने इनकनीस मिस्सी के उत्तरiconv से कमांड के आधार पर एक उपयोगी बैश स्क्रिप्ट तैयार की है :

#!/bin/bash

if [ $# -lt 1 ]
then
   echo 'Specify at least one file to fix.'
   exit 1
fi

# Temp file to store conversion attempt(s).
tmp='tmp.fixed'

for file in "$@"
do
  # Try to fix the file encoding.
  if iconv -f WINDOWS-1256 "$file" -t UTF-8 > $tmp; then
    echo "Fixed: '$file'"
    cat $tmp > "$file"
  else
    echo "Failed to fix: '$file'"
  fi
done
rm $tmp

इस स्क्रिप्ट को इस रूप में सहेजें fix-encoding.sh, इसे उपयोग करने की अनुमति दें chmod +x fix-encoding.shऔर इसे इस तरह उपयोग करें:

./fix-encoding.sh myfile.txt my2ndfile.srt my3rdfile.sub

यह स्क्रिप्ट इनपुट के रूप में प्रदान की गई किसी भी फाइल की एन्कोडिंग को ठीक करने का प्रयास करेगी। ध्यान दें कि फ़ाइलों को जगह में तय किया जाएगा, इसलिए सामग्री को ओवरराइट किया जाएगा।


आपको "  ...  " से $ फ़ाइल डालने की आवश्यकता नहीं है क्योंकि चर को दोहरे उद्धरण चिह्नों के साथ-साथ खुले पाठ में विस्तारित किया जाता है। केवल '$ फ़ाइल' को शाब्दिक रूप से प्रस्तुत किया जाएगा, डॉलर के संकेत के साथ, बाश द्वारा।
इंकिस Mrsi

जैसा कि मैंने 'इंनिस मिसी' द्वारा पोस्ट किए गए जवाब के जवाब में उल्लेख किया है, वह समाधान काम करने में विफल रहा और इसलिए यह स्क्रिप्ट करता है।
सैय्यद मोहम्मद

1

मुझे नहीं पता कि यह फ़ार्सी के साथ काम करता है: मैं गेडिट का उपयोग करता हूं, यह गलत एन्कोडिंग के साथ एक दोष देता है, और मैं यूटीएफ -8 में अनुवाद करना चाहता हूं, यह चुना गया था, यह सिर्फ पाठ था प्रारूप नहीं, लेकिन यहां एक स्क्रीनशॉट है !

यहां छवि विवरण दर्ज करें

क्षमा करें, मुझे अंततः अपनी पाठ फ़ाइलों के माध्यम से मिला, इसलिए अब वे सभी रूपांतरित हो गए हैं।

मुझे नोटपैड ++ बहुत पसंद था, यह अभी भी याद है।


Gedit समस्या को ठीक नहीं कर सकता। हालांकि Gedit मेरी फ़ाइल के लिए एन्कोडिंग त्रुटि नहीं दिखाता है, तब भी जब वह ऐसा नहीं करता है तो इसे ठीक नहीं कर सकता है। मैंने Gedit में UTF-8 एन्कोडिंग के साथ "save as" का भी प्रयास किया है, लेकिन यह समस्या को ठीक नहीं करता है।
सैयद मोहम्मद

1

यदि आप सीएलआई के बजाय GUI में काम करना पसंद करते हैं, जैसे मैं करता हूं:

  1. Geany के साथ खुली फ़ाइल (संपादक)
  2. फ़ाइल मेनू पर जाएं -> पुनः लोड करें
  3. अपनी भाषा में पहचान योग्य वर्णों में परिवर्तन करने के लिए ग्रहण की गई एन्कोडिंग चुनें। उदाहरण के लिए, ग्रीक उप को पढ़ने के लिए मैं पश्चिम यूरोपीय के रूप में पुनः लोड करूंगा -> ग्रीक (Windows-1253)
  4. दस्तावेज़ मेनू पर जाएँ > एन्कोडिंग सेट करें -> यूनिकोड -> UTF-8
  5. सहेजें

काम नहीं करता है ..
औरिमास

0

मेरे द्वारा पाया गया कार्य समाधान Microsoft विज़ुअल स्टूडियो कोड टेक्स्ट एडिटर का उपयोग कर रहा है जो फ्रीवेयर और लिनक्स के लिए उपलब्ध है।

वह फ़ाइल खोलें जिसे आप VS-कोड में इसकी एन्कोडिंग में बदलना चाहते हैं। खिड़की के नीचे, कुछ बटन हैं। उनमें से एक फ़ाइल एन्कोडिंग से संबंधित है, जैसा कि नीचे दिखाया गया है:

यहां छवि विवरण दर्ज करें

इस बटन पर क्लिक करने से एक ओवरहेड मेनू आता है जिसमें दो आइटम शामिल हैं। इस मेनू से नीचे की तरह, "एनकोडिंग के साथ फिर से खोलें" विकल्प चुनें:

यहां छवि विवरण दर्ज करें

यह एक और मेनू खोलेगा जिसमें विभिन्न एन्कोडिंग की एक सूची शामिल है, जैसा कि नीचे दिखाया गया है। अब "अरबी (विंडोज 1256)" चुनें:

यहां छवि विवरण दर्ज करें

यह इस तरह से अस्पष्ट पाठ को ठीक करेगा:

यहां छवि विवरण दर्ज करें

अब फिर से एन्कोडिंग बटन पर क्लिक करें और इस बार नीचे दिए गए "एनकोडिंग के साथ सहेजें" विकल्प चुनें:

यहां छवि विवरण दर्ज करें

और नए मेनू में "UTF-8" विकल्प चुनें:

यहां छवि विवरण दर्ज करें

यह UTF-8 एन्कोडिंग का उपयोग करके सही फ़ाइल को बचाएगा:

यहां छवि विवरण दर्ज करें

किया हुआ! :)


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