मुझे वीडियो omxplayer में उपशीर्षक फ़ाइलों के साथ कुछ समस्याएं थीं। इसे हल करने के लिए मुझे विंडोज़ -1250 से यूटीएफ -8 एन्कोडिंग में बदलना पड़ा। मेरा सवाल है, मैं कुछ विशिष्ट फ़ाइल के लिए कैसे देख सकता हूं जो एन्कोडिंग का उपयोग किया जाता है?
मुझे वीडियो omxplayer में उपशीर्षक फ़ाइलों के साथ कुछ समस्याएं थीं। इसे हल करने के लिए मुझे विंडोज़ -1250 से यूटीएफ -8 एन्कोडिंग में बदलना पड़ा। मेरा सवाल है, मैं कुछ विशिष्ट फ़ाइल के लिए कैसे देख सकता हूं जो एन्कोडिंग का उपयोग किया जाता है?
जवाबों:
आप वास्तव में स्वचालित रूप से यह पता नहीं लगा सकते हैं कि मूल रूप से एन्कोडिंग एक्स के साथ एक फाइल लिखी गई थी या नहीं।
आप आसानी से क्या कर सकते हैं, यह सत्यापित करने के लिए कि क्या किसी विशिष्ट कोडेक का उपयोग करके पूरी फ़ाइल को किसी भी तरह सफलतापूर्वक डिकोड किया जा सकता है (लेकिन जरूरी नहीं कि सही ढंग से)। यदि आपको कोई बाइट्स मिलती हैं जो किसी दिए गए एन्कोडिंग के लिए मान्य नहीं हैं, तो यह कुछ और होना चाहिए।
समस्या यह है कि कई कोडेक्स समान हैं और उनके समान "मान्य बाइट पैटर्न" हैं, बस उन्हें विभिन्न पात्रों के रूप में व्याख्या करना है। उदाहरण के लिए, äएक एन्कोडिंग éमें दूसरे या øतीसरे में मेल हो सकता है । कंप्यूटर वास्तव में सही ढंग से मानव पठनीय पाठ में बाइट परिणामों की व्याख्या करने के तरीके का पता नहीं लगा सकता है (जब तक कि यदि आप सभी प्रकार की भाषाओं के लिए एक शब्दकोश जोड़ते हैं और इसे वर्तनी जांच करते हैं ...)। आपको यह भी पता होना चाहिए कि कुछ कैरेक्टर सेट वास्तव में दूसरों के सबसेट होते हैं, जैसे कि 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
यदि यह पर्याप्त नहीं है, तो मैं आपको इस उत्तर के लिए लिखी गई पायथन स्क्रिप्ट की पेशकश कर सकता हूं , जो पूरी फाइलों को स्कैन करती है और एक निर्दिष्ट वर्ण सेट का उपयोग करके उन्हें डिकोड करने की कोशिश करती है। यदि यह सफल होता है, तो एन्कोडिंग एक संभावित उम्मीदवार है। अन्यथा यदि कोई बाइट्स है जो इसके साथ डीकोड नहीं किया जा सकता है, तो आप उस कैरेक्टर को अपनी सूची से हटा सकते हैं।
नाम का एक प्रोग्राम 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।
fileएक अनुमान लगाता है, और अक्सर यह एक बहुत अच्छा नहीं है। उदाहरण के लिए, मेरे परीक्षण में, इसने MacRoman और CP-1252 दोनों को ISO-8859 के रूप में गलत पहचान दिया, जिसके परिणामस्वरूप "š" और "ß" को हाथापाई हुई।
.sqlफ़ाइल की सही एन्कोडिंग खोजने के लिए कुछ घंटे बिताए और मुझे fileपता चला कि यह वास्तव में एक gzipसंपीड़ित फ़ाइल है!
piconvएन्कोडिंग बदलने के लिए;)