मैं किसी टेक्स्ट फ़ाइल के एन्कोडिंग / कोडपेज का पता कैसे लगा सकता हूं


295

हमारे आवेदन में, हम पाठ फ़ाइलें (प्राप्त .txt, .csvविविध स्रोतों से, आदि)। पढ़ते समय, इन फ़ाइलों में कभी-कभी कचरा होता है, क्योंकि एक अलग / अज्ञात कोडपेज में बनाई गई फाइलें।

क्या किसी पाठ फ़ाइल के कोडपेज का पता (स्वतः) लगाने का कोई तरीका है?

detectEncodingFromByteOrderMarks, पर StreamReaderनिर्माता, के लिए काम करता है UTF8 और अन्य यूनिकोड चिह्नित फ़ाइलों को, लेकिन मैं, कोड पृष्ठों को पहचानने का जैसे एक तरह से तलाश कर रहा हूँ ibm850, windows1252


आपके उत्तर के लिए धन्यवाद, यही मैंने किया है।

हमारे द्वारा प्राप्त की जाने वाली फाइलें एंड-यूजर्स की हैं, उनके पास कोडपेज के बारे में कोई सुराग नहीं है। रिसीवर भी अंत-उपयोगकर्ता हैं, अब तक यह वही है जो वे कोडपेज के बारे में जानते हैं: कोडपेज मौजूद हैं, और कष्टप्रद हैं।

समाधान:

  • नोटपैड में प्राप्त फ़ाइल खोलें, पाठ के एक विकृत टुकड़े को देखें। यदि किसी को फ्रैंकोइस या कुछ और कहा जाता है, तो आपकी मानवीय बुद्धि से आप यह अनुमान लगा सकते हैं।
  • मैंने एक छोटा ऐप बनाया है जिसका उपयोग उपयोगकर्ता फ़ाइल को खोलने के लिए कर सकता है, और एक पाठ दर्ज कर सकता है जिसे उपयोगकर्ता जानता है कि यह फ़ाइल में दिखाई देगा, जब सही कोडपेज का उपयोग किया जाता है।
  • सभी कोडपेज के माध्यम से लूप करें, और उन लोगों को प्रदर्शित करें जो उपयोगकर्ता द्वारा प्रदान किए गए पाठ के साथ समाधान देते हैं।
  • यदि एक से अधिक कोडपेज पॉप अप करते हैं, तो उपयोगकर्ता को अधिक टेक्स्ट निर्दिष्ट करने के लिए कहें।

जवाबों:


260

आप कोडपेज का पता नहीं लगा सकते, आपको इसे बताया जाना चाहिए। आप बाइट्स का विश्लेषण कर सकते हैं और अनुमान लगा सकते हैं, लेकिन यह कुछ विचित्र (कभी-कभी मनोरंजक) परिणाम दे सकता है। मुझे अब यह नहीं मिल रहा है, लेकिन मुझे यकीन है कि नोटपैड को चीनी भाषा में अंग्रेजी पाठ प्रदर्शित करने में धोखा दिया जा सकता है।

वैसे भी, यह वही है जिसे आपको पढ़ने की आवश्यकता है: पूर्ण न्यूनतम हर सॉफ्टवेयर डेवलपर बिल्कुल, यूनिकोड और चरित्र सेट (कोई बहाना नहीं!) के बारे में सकारात्मक रूप से जानना चाहिए

विशेष रूप से जोएल कहते हैं:

एनकोडिंग के बारे में सबसे महत्वपूर्ण तथ्य

यदि आप पूरी तरह से सब कुछ भूल जाते हैं जो मैंने अभी समझाया है, तो कृपया एक अत्यंत महत्वपूर्ण तथ्य याद रखें। यह समझ में नहीं आता है कि यह क्या एन्कोडिंग का उपयोग करता है यह जानने के बिना एक स्ट्रिंग है। अब आप रेत में अपना सिर नहीं रख सकते हैं और दिखा सकते हैं कि "सादा" पाठ ASCII है। सादा पाठ के रूप में ऐसी कोई बात नहीं है।

यदि आपके पास एक स्ट्रिंग है, स्मृति में, एक फ़ाइल में, या एक ईमेल संदेश में, आपको यह जानना होगा कि इसमें क्या एन्कोडिंग है या आप इसे व्याख्या नहीं कर सकते हैं या इसे उपयोगकर्ताओं को सही ढंग से प्रदर्शित नहीं कर सकते हैं।


43
मैंने दो कारणों से इस उत्तर को अस्वीकार कर दिया। पहला, यह कहना कि "आपको बताने की आवश्यकता है" मददगार नहीं है। मुझे कौन बताएगा, और वे किस माध्यम से ऐसा करेंगे? यदि मैं फ़ाइल को सहेजने वाला व्यक्ति हूं, तो मैं कौन पूछूंगा? खुद? दूसरा, प्रश्न का उत्तर देने के लिए संसाधन के रूप में लेख विशेष रूप से उपयोगी नहीं है। यह आलेख डेविड सेडरिस शैली में लिखे एन्कोडिंग के इतिहास का अधिक है। मैं कथा की सराहना करता हूं, लेकिन यह सीधे सवाल का जवाब नहीं देता है।
जीनोरमा

9
@geneorama, मुझे लगता है कि जोएल का लेख आपके सवालों को मुझसे बेहतर तरीके से संबोधित करता है, लेकिन यहाँ जाता है ... माध्यम निश्चित रूप से उस वातावरण पर निर्भर करता है जिसमें पाठ प्राप्त होता है। बेहतर है कि फ़ाइल (या जो भी हो) में वह जानकारी हो (मैं HTML और XML सोच रहा हूँ)। अन्यथा पाठ भेजने वाले व्यक्ति को उस जानकारी की आपूर्ति करने की अनुमति दी जानी चाहिए। यदि आप फ़ाइल बनाने वाले व्यक्ति थे, तो आप यह नहीं जान सकते कि यह किस एन्कोडिंग का उपयोग करता है?
जे.वी.

4
@geneorama, जारी ... अंत में, मुझे लगता है कि मुख्य कारण यह है कि लेख इस सवाल का जवाब नहीं देता है, क्योंकि उस सवाल का कोई सरल जवाब नहीं है। यदि प्रश्न "मैं कैसे अनुमान लगा सकता हूं ..." तो मैं अलग तरीके से उत्तर देता।
जे.वी.

1
@ जेवी मुझे बाद में पता चला कि xml / html चरित्र एन्कोडिंग को निर्दिष्ट कर सकते हैं, उस उपयोगी tidbit का उल्लेख करने के लिए धन्यवाद।
जीनोरमा

1
@JV "एक फ़ाइल बनाएं" शब्दों का एक खराब विकल्प हो सकता है। मुझे लगता है कि एक उपयोगकर्ता एक फ़ाइल के एन्कोडिंग को निर्दिष्ट कर सकता है जो उपयोगकर्ता उत्पन्न करता है। हाल ही में मैंने हाइव का उपयोग करके एक Hadoop क्लस्टर से एक फ़ाइल "बनाई", और इसे विभिन्न क्लाइंट मशीनों पर डाउनलोड करने से पहले इसे एक एफ़टीपी में पारित कर दिया। परिणाम में कुछ यूनिकोड कचरा था, लेकिन मुझे नहीं पता कि किस कदम ने मुद्दा बनाया। मैंने एन्कोडिंग को स्पष्ट रूप से निर्दिष्ट नहीं किया है। मैं चाहता हूं कि मैं प्रत्येक चरण पर एन्कोडिंग की जांच कर सकूं।
जीनोरमा

31

यदि आप गैर-यूटीएफ एनकोडिंग (यानी कोई बीओएम) का पता लगाने के लिए देख रहे हैं, तो आप मूल रूप से पाठ के मूल्यांकन और सांख्यिकीय विश्लेषण के लिए नीचे हैं। आप यूनिवर्सल चारसेट डिटेक्शन ( वेबैक मशीन के माध्यम से बेहतर प्रारूपण के साथ एक ही लिंक) पर मोज़िला पेपर पर एक नज़र डालना चाहते हैं ।


9
मजेदार रूप से पर्याप्त मेरा फ़ायरफ़ॉक्स 3.05 इंस्टॉलेशन उस पृष्ठ को UTF-8 के रूप में पहचानता है, जिसमें कई प्रश्न-चिह्न-ए-डायमंड ग्लिफ़ दिखाए जाते हैं, हालांकि स्रोत में विंडोज़ -1252 के लिए मेटा टैग है। चरित्र एन्कोडिंग को मैन्युअल रूप से बदलना दस्तावेज़ को सही ढंग से दिखाता है।
devstuff

5
आपका वाक्य "यदि आप गैर-यूटीएफ एन्कोडिंग (यानी कोई बीओएम) का पता लगाने के लिए देख रहे हैं" थोड़ा भ्रामक है; यूनिकोड मानक utf-8 दस्तावेज़ों में BOM जोड़ने की अनुशंसा नहीं करता है! (और यह सिफारिश, या इसके अभाव में, कई सिरदर्द का स्रोत है)। रेफरी: en.wikipedia.org/wiki/Byte_order_mark#UTF-8
ताओ

ऐसा इसलिए किया जाता है ताकि आप अनावश्यक BOM को संचित किए बिना UTF-8 स्ट्रिंग्स को गाढ़ा कर सकें। उदाहरण के लिए, इसके अलावा UTF-8 के लिए एक बाइट-ऑर्डर मार्क की आवश्यकता नहीं है।
साशोअल्म

26

क्या आपने मोज़िला यूनिवर्सल चार्सेट डिटेक्टर के लिए C # पोर्ट की कोशिश की है

Http://code.google.com/p/ude/ से उदाहरण

public static void Main(String[] args)
{
    string filename = args[0];
    using (FileStream fs = File.OpenRead(filename)) {
        Ude.CharsetDetector cdet = new Ude.CharsetDetector();
        cdet.Feed(fs);
        cdet.DataEnd();
        if (cdet.Charset != null) {
            Console.WriteLine("Charset: {0}, confidence: {1}", 
                 cdet.Charset, cdet.Confidence);
        } else {
            Console.WriteLine("Detection failed.");
        }
    }
}    

1
Windows-1252 प्रकार के लिए निर्दोष रूप से काम किया।
देखिए बिस्किट

और आप इसका उपयोग करके स्ट्रिंग को टेक्स्ट फ़ाइल पढ़ने के लिए कैसे उपयोग कर सकते हैं? चारसेटडेक्टर स्ट्रिंग प्रारूप में एन्कोडिंग का नाम देता है और यही है ...
बार्टोसज़

@Bartosz private Encoding GetEncodingFromString(string encoding) { try { return Encoding.GetEncoding(encoding); } catch { return Encoding.ASCII; } }
PrivatePyle

15

आप कोडपेज का पता नहीं लगा सकते

यह स्पष्ट रूप से गलत है। हर वेब ब्राउज़र में पृष्ठों से निपटने के लिए कुछ प्रकार के सार्वभौमिक चारसेट डिटेक्टर होते हैं जिनके पास एन्कोडिंग का कोई संकेत नहीं होता है। फ़ायरफ़ॉक्स में एक है। आप कोड डाउनलोड कर सकते हैं और देख सकते हैं कि यह कैसे करता है। कुछ दस्तावेज यहां देखें । मूल रूप से, यह एक हेयुरिस्टिक है, लेकिन एक जो वास्तव में अच्छी तरह से काम करता है।

पाठ की एक उचित मात्रा को देखते हुए, भाषा का पता लगाना भी संभव है।

यहाँ एक और है जो मैंने अभी-अभी Google का उपयोग करके पाया है:


39
"हेयूरिस्टिक्स" - इसलिए ब्राउज़र इसका पता नहीं लगा रहा है, यह एक शिक्षित अनुमान लगा रहा है। "वास्तव में अच्छी तरह से काम करता है" - तो यह हर समय काम नहीं करता है? मुझे लगता है जैसे हम समझौते में हैं।
जे.वी.

10
HTML के लिए मानक यह निर्धारित करता है कि, यदि दस्तावेज़ द्वारा वर्ण सेट को परिभाषित नहीं किया गया है, तो इसे UTF-8 के रूप में एन्कोडेड माना जाना चाहिए।
जॉन ट्रैंटविन

5
जब तक हम गैर-मानक HTML दस्तावेज़ नहीं पढ़ रहे हैं, तब तक यह शांत है। या गैर-HTML दस्तावेज़।
कोस

2
यह उत्तर गलत है, इसलिए मुझे नीचा दिखाना पड़ा। यह कहना कि यह गलत होगा कि आप कोडपेज का पता नहीं लगा सकते, गलत है। आप अनुमान लगा सकते हैं और आपके अनुमान अच्छे हो सकते हैं, लेकिन आप एक कोडपेज का "पता" नहीं लगा सकते।
1380 में z80crew

1
@JonTrauntvein एचटीएमएल 5 चश्मा के अनुसार a character encoding declaration is required even if the encoding is US-ASCII- एक कमी की घोषणा के परिणामस्वरूप एक एल्गोरिथ्म एल्गोरिथ्म का उपयोग किया जाता है, यूटीएफ 8 पर वापस गिरने में नहीं।
z80crew

9

मुझे पता है कि इस सवाल के लिए बहुत देर हो चुकी है और यह समाधान कुछ (इसके अंग्रेजी-केंद्रित पूर्वाग्रह और सांख्यिकीय / अनुभवजन्य परीक्षण की कमी के कारण) के लिए अपील नहीं करेगा, लेकिन यह मेरे लिए बहुत अच्छी तरह से काम किया है, खासकर प्रसंस्करण के लिए अपलोड किए गए सीएसवी डेटा:

http://www.architectshack.com/TextFileEncodingDetector.ashx

लाभ:

  • बीओएम का पता लगाने में निर्मित
  • डिफ़ॉल्ट / फ़ॉलबैक एन्कोडिंग अनुकूलन योग्य
  • पश्चिमी-यूरोपीय-आधारित फ़ाइलों के लिए बहुत विश्वसनीय (मेरे अनुभव में) जिसमें यूटीएफ -8 और लैटिन-1-शैली फ़ाइलों के मिश्रण के साथ कुछ विदेशी डेटा (जैसे फ्रेंच नाम) हैं - मूल रूप से यूएस और पश्चिमी यूरोपीय वातावरणों के थोक।

नोट: मैं वह हूं जिसने इस वर्ग को लिखा है, इसलिए जाहिर है कि इसे नमक के दाने के साथ लें! :)



7

अलग समाधान की तलाश में, मैंने पाया कि

https://code.google.com/p/ude/

यह समाधान थोड़े भारी है।

मुझे पहले 4 बाइट्स और शायद xml चारसेट डिटेक्शन पर आधारित कुछ बुनियादी एन्कोडिंग डिटेक्शन की आवश्यकता थी - इसलिए मैंने इंटरनेट से कुछ सैंपल सोर्स कोड लिए हैं और थोड़ा संशोधित संस्करण जोड़ा है

http://lists.w3.org/Archives/Public/www-validator/2002Aug/0084.html

जावा के लिए लिखा।

    public static Encoding DetectEncoding(byte[] fileContent)
    {
        if (fileContent == null)
            throw new ArgumentNullException();

        if (fileContent.Length < 2)
            return Encoding.ASCII;      // Default fallback

        if (fileContent[0] == 0xff
            && fileContent[1] == 0xfe
            && (fileContent.Length < 4
                || fileContent[2] != 0
                || fileContent[3] != 0
                )
            )
            return Encoding.Unicode;

        if (fileContent[0] == 0xfe
            && fileContent[1] == 0xff
            )
            return Encoding.BigEndianUnicode;

        if (fileContent.Length < 3)
            return null;

        if (fileContent[0] == 0xef && fileContent[1] == 0xbb && fileContent[2] == 0xbf)
            return Encoding.UTF8;

        if (fileContent[0] == 0x2b && fileContent[1] == 0x2f && fileContent[2] == 0x76)
            return Encoding.UTF7;

        if (fileContent.Length < 4)
            return null;

        if (fileContent[0] == 0xff && fileContent[1] == 0xfe && fileContent[2] == 0 && fileContent[3] == 0)
            return Encoding.UTF32;

        if (fileContent[0] == 0 && fileContent[1] == 0 && fileContent[2] == 0xfe && fileContent[3] == 0xff)
            return Encoding.GetEncoding(12001);

        String probe;
        int len = fileContent.Length;

        if( fileContent.Length >= 128 ) len = 128;
        probe = Encoding.ASCII.GetString(fileContent, 0, len);

        MatchCollection mc = Regex.Matches(probe, "^<\\?xml[^<>]*encoding[ \\t\\n\\r]?=[\\t\\n\\r]?['\"]([A-Za-z]([A-Za-z0-9._]|-)*)", RegexOptions.Singleline);
        // Add '[0].Groups[1].Value' to the end to test regex

        if( mc.Count == 1 && mc[0].Groups.Count >= 2 )
        {
            // Typically picks up 'UTF-8' string
            Encoding enc = null;

            try {
                enc = Encoding.GetEncoding( mc[0].Groups[1].Value );
            }catch (Exception ) { }

            if( enc != null )
                return enc;
        }

        return Encoding.ASCII;      // Default fallback
    }

यह फ़ाइल से संभवतः 1024 बाइट्स पढ़ने के लिए पर्याप्त है, लेकिन मैं पूरी फ़ाइल लोड कर रहा हूं।


7

अगर कोई 93.9% समाधान के लिए देख रहा है। यह मेरे लिए काम करता है:

public static class StreamExtension
{
    /// <summary>
    /// Convert the content to a string.
    /// </summary>
    /// <param name="stream">The stream.</param>
    /// <returns></returns>
    public static string ReadAsString(this Stream stream)
    {
        var startPosition = stream.Position;
        try
        {
            // 1. Check for a BOM
            // 2. or try with UTF-8. The most (86.3%) used encoding. Visit: http://w3techs.com/technologies/overview/character_encoding/all/
            var streamReader = new StreamReader(stream, new UTF8Encoding(encoderShouldEmitUTF8Identifier: false, throwOnInvalidBytes: true), detectEncodingFromByteOrderMarks: true);
            return streamReader.ReadToEnd();
        }
        catch (DecoderFallbackException ex)
        {
            stream.Position = startPosition;

            // 3. The second most (6.7%) used encoding is ISO-8859-1. So use Windows-1252 (0.9%, also know as ANSI), which is a superset of ISO-8859-1.
            var streamReader = new StreamReader(stream, Encoding.GetEncoding(1252));
            return streamReader.ReadToEnd();
        }
    }
}

बहुत अच्छा समाधान है। 2 से अधिक एनकोडिंग्स (UTF-8 और ASCI 1252) की अनुमति दी गई एन्कोडिंग के लूप में ReadAsString () के शरीर को आसानी से लपेटा जा सकता है।
वीरुस्तरीनी

टन के उदाहरणों की कोशिश करने के बाद, मैं अंत में आपके पास गया। मैं अभी एक खुशहाल जगह पर हूं। lol धन्यवाद !!!!!!!
सेड्रिक

यह 1252 बनाम 1250 का पता लगाने के तरीके का जवाब नहीं हो सकता है, लेकिन यह पूरी तरह से बिना किसी बॉम के साथ या इसके बिना "UTF-8 का पता लगाने" का जवाब होना चाहिए !!
चक

4

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

उस शब्दकोश (हैश) को देखते हुए, आप अपना इनपुट टेक्स्ट और लेते हैं:

  • यदि यह किसी भी BOM चरित्र (UTF-16-BE के लिए '\ xfe \ xff', UTF-16-LE के लिए '\ xff \ xfe', UTF-8 आदि के लिए '\ xef \ xbb \ xbf') से शुरू होता है, तो मैं सुझाए अनुसार उपचार करें
  • यदि नहीं, तो पाठ का एक बड़ा पर्याप्त नमूना लें, नमूने के सभी बाइट-जोड़े लें और एन्कोडिंग चुनें जो शब्दकोश से सुझाए गए सबसे कम आम हैं।

यदि आपने UTF एनकोडेड पाठ का नमूना लिया है जो किसी BOM से शुरू नहीं होता है, तो दूसरा चरण उन लोगों को कवर करेगा जो पहले चरण से फिसल गए थे।

अब तक, यह मेरे लिए काम करता है (नमूना डेटा और बाद के इनपुट डेटा विभिन्न भाषाओं में उपशीर्षक हैं) घटती त्रुटि दर के साथ।


4

टूल "यूचर्ड" प्रत्येक वर्णसेट के लिए वर्ण आवृत्ति वितरण मॉडल का उपयोग करके इसे अच्छी तरह से करता है। बड़ी फ़ाइलों और अधिक "विशिष्ट" फाइलों में अधिक आत्मविश्वास (स्पष्ट रूप से) है।

Ubuntu पर, आप बस apt-get install uchardet

अन्य प्रणालियों पर, स्रोत, उपयोग और डॉक्स यहां प्राप्त करें: https://github.com/BYVoid/uchardet


होमब्रे के माध्यम से मैक पर:brew install uchardet
पॉल बी

3

StreamReader वर्ग का निर्माता एक 'एन्कोडिंग एन्कोडिंग' पैरामीटर लेता है।


यह यहाँ केवल "एन्कोडिंग" लिंक है .. और वर्णन कहता है कि हमें एन्कोडिंग प्रदान करना है ..
सूरज

@ सूरज: दूसरे ओवरलोड को देखिए।
लेप्पी

मूल लेखक किसी फ़ाइल के लिए एन्कोडिंग का पता लगाना चाहता है, जिसमें संभवतः BOM मार्कर नहीं होगा। StreamReader हस्ताक्षर के अनुसार BOM हैडर से एन्कोडिंग का पता लगाता है। सार्वजनिक स्ट्रीमर (स्ट्रीम स्ट्रीम, बूल डिटेक्टनकोडिंगफ्रॉम ब्रेकरमैकर्स)
ibondre

1

यदि आप सी लाइब्रेरी से लिंक कर सकते हैं, तो आप उपयोग कर सकते हैं libencaHttp://cihar.com/software/enca/ देखें । मैन पेज से:

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

यह GPL v2 है।


0

एक ही समस्या है, लेकिन यह स्वचालित रूप से पता लगाने के लिए एक अच्छा समाधान नहीं मिला। अब उसके लिए PsPad (www.pspad.com) का उपयोग करके im;) ठीक काम करता है


0

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

ज्यादातर लोग (या एप्लिकेशन) हर बार एक ही मशीन में, बहुत बार एक ही ऑर्डर में सामान करते हैं, इसलिए इसकी काफी संभावना है कि "बॉब एक ​​.csv फ़ाइल बनाता है और इसे मैरी को भेजता है यह हमेशा Windows-1252 का उपयोग करेगा या जो भी उसकी मशीन के लिए चूक।

जहां संभव हो ग्राहक प्रशिक्षण का थोड़ा भी नुकसान नहीं होता है :-)


0

मैं वास्तव में फ़ाइल एन्कोडिंग का पता लगाने के प्रोग्रामिंग तरीके का नहीं, बल्कि एक सामान्य खोज रहा था, लेकिन मुझे वह अभी तक नहीं मिला। अलग-अलग एन्कोडिंग के साथ परीक्षण करके मैंने जो पाया वह यह था कि मेरा पाठ UTF-7 था।

तो जहाँ मैं पहली बार कर रहा था: StreamReader file = File.OpenText (fullfilename);

मुझे इसे बदलना पड़ा: StreamReader file = new StreamReader (fullfilename, System.Text.Encoding.UTF7);

OpenText ने माना कि यह UTF-8 है।

आप इस नए StreamReader (फुलफिलनेम, ट्रू) की तरह स्ट्रीमरैडर भी बना सकते हैं, दूसरा पैरामीटर का मतलब है कि यह कोशिश करनी चाहिए और फाइल के बाइटऑर्डरमार्क से एन्कोडिंग का पता लगाना चाहिए, लेकिन यह मेरे काम में नहीं आया।


@ जॉनमोचिन मैं मानता हूं कि यह दुर्लभ है, लेकिन यह आईएमएपी प्रोटोकॉल के कुछ हिस्सों में अनिवार्य है। यदि आप यहां हैं, तो आपको अनुमान नहीं लगाना होगा, हालांकि।
ट्रिपल

0

AkelPad में फ़ाइल खोलें (या सिर्फ एक कॉपी किए गए टेक्स्ट को कॉपी / पेस्ट करें), Edit -> Selection -> Recode ... -> "Autodetect" को चेक करें।


0

ITmeze पोस्ट के एडऑन के रूप में, मैंने इस फ़ंक्शन का उपयोग मोज़िला यूनिवर्सल चार्सेट डिटेक्टर के लिए C # पोर्ट के आउटपुट को परिवर्तित करने के लिए किया है

    private Encoding GetEncodingFromString(string codePageName)
    {
        try
        {
            return Encoding.GetEncoding(codePageName);
        }
        catch
        {
            return Encoding.ASCII;
        }
    }

MSDN


0

धन्यवाद @ Erik Aronesty for उल्लेख करने के लिए uchardet

इस बीच लिनक्स के लिए एक ही (?) उपकरण मौजूद है chardet:।
या, साइबरविन पर आप उपयोग करना चाह सकते हैं chardetect:।

देखें: chardet man पेज: https://www.commandlinux.com/man-page/man1/chardetect.1.html

यह प्रत्येक दी गई फ़ाइल के लिए वर्णक्रम एन्कोडिंग का पता लगाएगा (अनुमान लगाएगा) और प्रत्येक फ़ाइल के पहचाने गए वर्ण एन्कोडिंग के लिए नाम और विश्वास स्तर की रिपोर्ट करेगा।


-1

मैं एक फ़ाइल को पढ़ते समय यूनिकोड और विंडोज़ डिफ़ॉल्ट एएनसी कोडपेज का पता लगाने के लिए इस कोड का उपयोग करता हूं। अन्य कोडिंग के लिए सामग्री की एक जांच आवश्यक है, मैन्युअल रूप से या प्रोग्रामिंग द्वारा। यह पाठ को उसी एन्कोडिंग के साथ सहेजने के लिए उपयोग किया जा सकता है जब इसे खोला गया था। (मैं VB.NET का उपयोग करता हूं)

'Works for Default and unicode (auto detect)
Dim mystreamreader As New StreamReader(LocalFileName, Encoding.Default) 
MyEditTextBox.Text = mystreamreader.ReadToEnd()
Debug.Print(mystreamreader.CurrentEncoding.CodePage) 'Autodetected encoding
mystreamreader.Close()

-1

यह पूछे जाने के बाद 10Y (!) बीत चुका था, और अभी भी मुझे MS के अच्छे, गैर-GPL'ed समाधान: IMultiLanguage2 API का कोई उल्लेख नहीं दिखता है।

पहले से उल्लिखित अधिकांश पुस्तकालय मोज़िला के यूडीई पर आधारित हैं - और यह उचित लगता है कि ब्राउज़र पहले से ही इसी तरह की समस्याओं से निपट चुके हैं। मुझे नहीं पता कि क्रोम का क्या समाधान है, लेकिन जब से आईई 5.0 एमएस ने अपना विमोचन किया है, और यह है:

  1. नि: शुल्क जीपीएल-और-जैसे लाइसेंसिंग मुद्दों पर,
  2. समर्थन और बनाए रखा शायद हमेशा के लिए,
  3. समृद्ध आउटपुट देता है - आत्मविश्वास स्कोर के साथ एन्कोडिंग / कोडपेज के सभी वैध उम्मीदवार,
  4. आश्चर्यजनक रूप से उपयोग करने में आसान है (यह एक एकल फ़ंक्शन कॉल है)।

यह एक देशी COM कॉल है, लेकिन यहां Carsten Zeumer द्वारा कुछ बहुत अच्छा काम किया गया है, जो कि नेट उपयोग के लिए इंटरॉप मेस को संभालता है। आसपास कुछ अन्य हैं, लेकिन बड़े और इस पुस्तकालय को वह ध्यान नहीं मिला जिसके वह हकदार है।

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