फ़ाइल की एन्कोडिंग का पता कैसे लगाएं?


115

मेरे फाइलसिस्टम (विंडोज 7) पर मेरे पास कुछ टेक्स्ट फाइल्स हैं (ये SQL स्क्रिप्ट फाइल्स हैं, अगर ऐसा है तो)।

जब नोटपैड ++ के साथ खोला जाता है , तो "एन्कोडिंग" मेनू में उनमें से कुछ में "यूसीएस -2 लिटिल एंडियन" और कुछ "यूटीएफ -8 बिना बीओएम" के एन्कोडिंग होने की सूचना है।

यहाँ क्या अंतर है? वे सभी पूरी तरह से मान्य स्क्रिप्ट लगते हैं। मैं यह कैसे बता सकता हूं कि नोटपैड ++ के बिना फाइल में क्या एनकोडिंग है?


7
फ़ायरफ़ॉक्स का उपयोग करने का एक बहुत सरल तरीका है। फ़ायरफ़ॉक्स का उपयोग करके अपनी फ़ाइल खोलें, फिर देखें> चरित्र एन्कोडिंग। विस्तृत यहाँ
कैथरीन गेसनियर

उत्तराधिकार का उपयोग करें। चेकआउट encaऔर chardetPOSIX सिस्टम के लिए।
जानूस ट्रॉल्सन

3
मुझे लगता है कि एक वैकल्पिक जवाब TRIAL और ERROR है। iconvविशेष रूप से इस उद्देश्य के लिए उपयोगी है। अनिवार्य रूप से आप अलग-अलग एन्कोडिंग के माध्यम से भ्रष्ट वर्ण तार / पाठ को पुनरावृत्त करते हैं, यह देखने के लिए कि कौन सा काम करता है। आप तब जीतते हैं, जब पात्र भ्रष्ट नहीं होते हैं। मैं एक प्रोग्रामेटिक उदाहरण के साथ यहां जवाब देना पसंद करूंगा। लेकिन यह दुर्भाग्य से एक संरक्षित सवाल है।
ब्रैंडन बर्टेल्सन 19

एफएफ मोज़िला चारसेट डिटेक्टरों का उपयोग कर रहा है । एक और सरल तरीका एमएस वर्ड के साथ फाइल को खोल रहा है, यह विभिन्न प्राचीन चीनी और जापानी
कोडपेजों के

तो chardetया chardetectआपके सिस्टम पर उपलब्ध नहीं है, तो आप अपने पैकेज प्रबंधक के माध्यम से पैकेज स्थापित कर सकते हैं (उदाहरण के लिए apt search chardet- ubuntu / डेबियन पर पैकेज आमतौर पर कहा जाता है python-chardetया python3-chardet) या के माध्यम से पिप के साथ pip install chardet(या pip install cchardetके लिए तेजी से ग-अनुकूलित संस्करण)।
ccpizza

जवाबों:


97

फाइलें आमतौर पर एक फाइल हेडर के साथ उनके एन्कोडिंग को दर्शाती हैं। यहाँ कई उदाहरण हैं । हालाँकि, हेडर को पढ़ते हुए भी आप कभी भी निश्चित नहीं हो सकते हैं कि किसी फाइल को वास्तव में उपयोग करना क्या है

उदाहरण के लिए, पहले तीन बाइट्स के साथ एक फ़ाइल 0xEF,0xBB,0xBFहै शायद एक UTF-8 एन्कोडेड फ़ाइल। हालाँकि, यह एक ISO-8859-1 फाइल हो सकती है जो कि पात्रों के साथ शुरू होती है । या यह पूरी तरह से एक अलग फ़ाइल प्रकार हो सकता है।

नोटपैड ++ यह अनुमान लगाने की पूरी कोशिश करता है कि किसी फाइल का उपयोग करने वाले एन्कोडिंग का उपयोग करते हैं, और अधिकांश समय यह सही हो जाता है। हालांकि कभी-कभी यह गलत हो जाता है - यही कारण है कि 'एनकोडिंग' मेनू वहाँ है, इसलिए आप इसके सबसे अच्छे अनुमान को ओवरराइड कर सकते हैं।

आपके द्वारा उल्लिखित दो एन्कोडिंग के लिए:

  • "यूसीएस -2 लिटिल एंडियन" फाइलें यूटीएफ -16 फाइलें हैं (जो मैं यहां दी गई जानकारी से समझती हूं) पर आधारित है, इसलिए संभवत:0xFF,0xFE पहले 2 बाइट्स के साथ शुरू करें । मैं जो बता सकता हूं, नोटपैड ++ उन्हें "यूसीएस -2" के रूप में वर्णित करता है क्योंकि यह यूटीएफ -16 के कुछ पहलुओं का समर्थन नहीं करता है।
  • "बिना UTM-8 BOM" फ़ाइलों में कोई हेडर बाइट नहीं है। यही "बिना बीओएम" बिट का मतलब है।


2
क्यों एक फ़ाइल जो BOM से शुरू होती है, उसे "बिना BOM के UTF-8" के रूप में स्वत: पहचाना जाता है?
माइकल बोर्गवर्ड

2
और अगर कोई फ़ाइल 0xFF, 0xFE से शुरू होती है, तो इसे यूटीएस -16 के रूप में ऑटो-डिटेक्ट किया जाना चाहिए, न कि यूसीएस -2। यूसीएस -2 का अनुमान शायद इसलिए लगाया जाता है क्योंकि इसमें मुख्य रूप से एएससीआईआई अक्षर होते हैं और इस तरह हर दूसरा बाइट शून्य होता है।
माइकल बोर्गवर्ड

2
अनुभव के साथ, अफसोस, मेटाडेटा ("हेडर") भी गलत हो सकता है। जानकारी रखने वाला डेटाबेस दूषित हो सकता है, या मूल अपलोडर को यह गलत मिल सकता है। (यह पिछले कुछ महीनों में हमारे लिए एक महत्वपूर्ण समस्या है; कुछ डेटा को "UTF-8" के रूप में अपलोड किया गया था, सिवाय इसके कि "वास्तव में ISO8859-1 था, क्योंकि वे वास्तव में एक ही हैं?" बाह! वैज्ञानिकों को रखा जाना चाहिए। मेटाडाटा की उत्पत्ति से दूर; वे इसे गलत मानते हैं ...)
डोनल फैलो

1
वास्तव में मुझे लगता है कि यह "मज़ेदार" है कि एन्कोडिंग समस्या अभी भी 2014 में बनी हुई है क्योंकि दुनिया में कोई भी फाइल "and» I'm "से शुरू नहीं होगी और जब मैं एक HTML पृष्ठ देखता हूं जो बहुत गलत एन्कोडिंग के साथ लोड किया गया है, तो मुझे बहुत आश्चर्य होगा। यह संभावना की बात है। यह गलत एन्कोडिंग का चयन करने के लिए अकल्पनीय है अगर एक और एन्कोडिंग अजीब आकर्षण से बचती है .. जो एन्कोडिंग की तलाश में है जो कि अजीब चार्ट से बचा जाता है 99,9999% मामलों में काम करेगा जो मुझे लगता है। लेकिन फिर भी त्रुटियां हैं .. साथ ही यह अंतरिक्ष को बचाने के लिए UTF8 के बजाय
एएससीआई

18

आप नहीं कर सकते। यदि आप ऐसा कर सकते हैं, तो वहाँ से बाहर "बेतरतीब गिबरिश" के साथ कई वेब साइट या पाठ फाइलें नहीं होंगी। यही कारण है कि आमतौर पर एन्कोडिंग को मेटा डेटा के रूप में पेलोड के साथ भेजा जाता है।

यदि यह नहीं है, तो आप सभी कर सकते हैं एक "स्मार्ट अनुमान" लेकिन परिणाम अक्सर अस्पष्ट है क्योंकि एक ही बाइट अनुक्रम कई एन्कोडिंग में मान्य हो सकता है।


2
ठीक है, फिर, क्या विंडोज़ ओएस उस जानकारी (मेटा डेटा) को वास्तव में कहीं स्टोर करता है? रजिस्ट्री में शायद?
मार्सेल

तुम गलत हो। वह कोडपेज़ है- बिलकुल नहीं। यूनिकोड एन्कोडिंग पर अनुमान लगाने के लिए एल्गोरिदम हैं।
डेडएमजी

6
@ मार्सेल: नहीं। इसीलिए "ASCII के अलावा कुछ भी" के लिए "टेक्स्ट फाइलें" इतनी समस्याग्रस्त हैं।
माइकल बोर्गवर्ड

अच्छी तरह से नोटपैड ++ यह कर सकता है, यह आपको बता सकता है कि पाठ फ़ाइल utf-8 एन्कोडेड है या नहीं
user25
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.