मैं कैसे देख सकता हूं कि किसी फाइल में कौन सा एन्कोडिंग इस्तेमाल किया गया है


23

मुझे वीडियो omxplayer में उपशीर्षक फ़ाइलों के साथ कुछ समस्याएं थीं। इसे हल करने के लिए मुझे विंडोज़ -1250 से यूटीएफ -8 एन्कोडिंग में बदलना पड़ा। मेरा सवाल है, मैं कुछ विशिष्ट फ़ाइल के लिए कैसे देख सकता हूं जो एन्कोडिंग का उपयोग किया जाता है?


piconvएन्कोडिंग बदलने के लिए;)
रिनविंड

हाँ। मैंने पहले ही एन्कोडिंग को बदल दिया है (1 फ़ाइल में)। लेकिन मेरे पास इनमें से कई हैं और छोटी स्क्रिप्ट बनाना चाहते थे जो इन सभी को नियंत्रित करे और फिर जरूरत पड़ने पर गुप्त हो। लेकिन मुझे लगता है कि मैं सिर्फ उन सभी को बदल सकता हूं। यदि कुछ पहले से ही UTF-8 में है तो कोई नुकसान नहीं होगा। सही?
NonStandardModel

कोई समस्या नहीं है :) बस
रिनजविंड

जवाबों:


26

आप वास्तव में स्वचालित रूप से यह पता नहीं लगा सकते हैं कि मूल रूप से एन्कोडिंग एक्स के साथ एक फाइल लिखी गई थी या नहीं।

आप आसानी से क्या कर सकते हैं, यह सत्यापित करने के लिए कि क्या किसी विशिष्ट कोडेक का उपयोग करके पूरी फ़ाइल को किसी भी तरह सफलतापूर्वक डिकोड किया जा सकता है (लेकिन जरूरी नहीं कि सही ढंग से)। यदि आपको कोई बाइट्स मिलती हैं जो किसी दिए गए एन्कोडिंग के लिए मान्य नहीं हैं, तो यह कुछ और होना चाहिए।

समस्या यह है कि कई कोडेक्स समान हैं और उनके समान "मान्य बाइट पैटर्न" हैं, बस उन्हें विभिन्न पात्रों के रूप में व्याख्या करना है। उदाहरण के लिए, äएक एन्कोडिंग éमें दूसरे या øतीसरे में मेल हो सकता है । कंप्यूटर वास्तव में सही ढंग से मानव पठनीय पाठ में बाइट परिणामों की व्याख्या करने के तरीके का पता नहीं लगा सकता है (जब तक कि यदि आप सभी प्रकार की भाषाओं के लिए एक शब्दकोश जोड़ते हैं और इसे वर्तनी जांच करते हैं ...)। आपको यह भी पता होना चाहिए कि कुछ कैरेक्टर सेट वास्तव में दूसरों के सबसेट होते हैं, जैसे कि ASCII एन्कोडिंग सबसे अधिक इस्तेमाल होने वाले कोडेक्स का एक हिस्सा है जैसे कुछ ANSI परिवार या UTF-8। उदाहरण के लिए इसका मतलब है कि UTF-8 के रूप में सहेजा गया पाठ जिसमें केवल सरल लैटिन वर्ण हैं, यह ASCII के रूप में सहेजी गई उसी फ़ाइल के समान होगा।


हालाँकि, आप यह समझाने से पीछे हट जाते हैं कि आप वास्तव में क्या कर सकते हैं:

एएससीआईआई / गैर-एएससीआईआई (आमतौर पर यूटीएफ -8) पाठ फ़ाइलों पर एक बुनियादी जांच के लिए, आप fileकमांड का उपयोग कर सकते हैं । यह कई कोडेक्स को नहीं जानता है और यह केवल एक फ़ाइल के पहले कुछ केबी की जांच करता है, यह मानते हुए कि बाकी में कोई नया वर्ण नहीं होगा। दूसरी ओर, यह अन्य सामान्य फ़ाइल प्रकारों को भी पहचानता है जैसे विभिन्न स्क्रिप्ट, HTML / XML दस्तावेज़ और कई बाइनरी डेटा प्रारूप (जो पाठ फ़ाइलों की तुलना करने के लिए सभी उदासीन हैं) और यह अतिरिक्त जानकारी मुद्रित कर सकता है कि क्या बहुत लंबी लाइनें हैं या क्या न्यूलाइन अनुक्रम का प्रकार (जैसे UNIX: LF, Windows: CR + LF) का उपयोग किया जाता है।

$ cat ascii.txt 
I am an ASCII file.
Just text and numb3rs and simple punctuation...

$ cat utf8.txt 
I am a Unicode file.
Special characters like Ω€®Ŧ¥↑ıØÞöäüß¡!

$ file ascii.txt utf8.txt 
ascii.txt: ASCII text
utf8.txt:  UTF-8 Unicode text

यदि यह पर्याप्त नहीं है, तो मैं आपको इस उत्तर के लिए लिखी गई पायथन स्क्रिप्ट की पेशकश कर सकता हूं , जो पूरी फाइलों को स्कैन करती है और एक निर्दिष्ट वर्ण सेट का उपयोग करके उन्हें डिकोड करने की कोशिश करती है। यदि यह सफल होता है, तो एन्कोडिंग एक संभावित उम्मीदवार है। अन्यथा यदि कोई बाइट्स है जो इसके साथ डीकोड नहीं किया जा सकता है, तो आप उस कैरेक्टर को अपनी सूची से हटा सकते हैं।


ANSI वास्तव में किसी वर्ण एन्कोडिंग का नाम नहीं है। शायद आप ANSI एस्केप कोड के बारे में सोच रहे हैं, जिसे ASCII वर्ण एन्कोडिंग के साथ व्यक्त किया जा सकता है।
कास्परड

@kasperd सबसे अधिक संभावना है कि वह आईएसओ 8859 या विंडो कोड पेज परिवार में से एक का उल्लेख कर रहा है। उत्तर अमेरिकी विंडोज डेवलपर्स के लिए, एएनएसआई एन्कोडिंग का अर्थ अक्सर ऐतिहासिक कारणों से विंडोज 1252 एन्कोडिंग होता है।
user1937198

हाँ, ठीक है, एएनएसआई मूल रूप से ASCII (कोड 0-127) प्लस एक स्थानीय-विशिष्ट कोडपेज (कोड 128-255) है। आप तो रहे हों तो सही ...
बाइट कमांडर


12

नाम का एक प्रोग्राम fileऐसा कर सकता है। उदाहरण:

$ echo aaa >> FILE
$ file FILE
FILE: ASCII text, with CRLF, LF line terminators
$ echo öäü >> FILE
$ file FILE
FILE: UTF-8 Unicode text, with CRLF, LF line terminators

यदि आप रुचि रखते हैं कि यह कैसे किया जाता है src/encoding.c


2
यह अनुमान लगा सकता है , वैसे भी।
हॉब्स

2
fileएक अनुमान लगाता है, और अक्सर यह एक बहुत अच्छा नहीं है। उदाहरण के लिए, मेरे परीक्षण में, इसने MacRoman और CP-1252 दोनों को ISO-8859 के रूप में गलत पहचान दिया, जिसके परिणामस्वरूप "š" और "ß" को हाथापाई हुई।
मरकुस

महान 👌! मेरी पुरानी .sqlफ़ाइल की सही एन्कोडिंग खोजने के लिए कुछ घंटे बिताए और मुझे fileपता चला कि यह वास्तव में एक gzipसंपीड़ित फ़ाइल है!
अमीरेज़ा नसीरी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.