2009-03-29 8 views
5

मैं इस तरह .NET में StreamReader वर्ग का उपयोग कर रहा:किसी फ़ाइल के एन्कोडिंग का अनुमान लगाने के लिए .NET में कोई BOM नहीं है?

using(StreamReader reader = new StreamReader("c:\somefile.html", true) { 
    string filetext = reader.ReadToEnd(); 
} 

यह ठीक काम करता है जब फाइल एक बीओएम है। मैं बिना किसी बीओएम वाली फाइल के साथ परेशानी में भाग गया .. मूल रूप से मुझे गंदगी मिल गई। जब मैंने एन्कोडिंग निर्दिष्ट किया। यूनिकोड ने ठीक काम किया, उदाहरण के लिए:

using(StreamReader reader = new StreamReader("c:\somefile.html", Encoding.Unicode, false) { 
    string filetext = reader.ReadToEnd(); 
} 

तो, मुझे फ़ाइल सामग्री को एक स्ट्रिंग में प्राप्त करने की आवश्यकता है। तो लोग आमतौर पर इसे कैसे संभालेंगे? मुझे पता है कि कोई समाधान नहीं है जो 100% समय पर काम करेगा, लेकिन मैं अपनी बाधाओं को बेहतर बनाना चाहता हूं .. वहां स्पष्ट रूप से सॉफ्टवेयर है जो अनुमान लगाने की कोशिश करता है (उदाहरण के लिए, नोटपैड, ब्राउज़र आदि)। क्या .NET ढांचे में कोई तरीका है जो मेरे लिए अनुमान लगाएगा? क्या किसी के पास कुछ कोड है जो वे साझा करना चाहते हैं?

अधिक पृष्ठभूमि: यह question मेरा जितना ही है, लेकिन मैं .NET भूमि में हूं। उस सवाल ने मुझे विभिन्न encoding detection पुस्तकालयों की सूची में ब्लॉग का नेतृत्व किया, लेकिन कोई भी .NET

उत्तर

5
+0

कोड प्रोजेक्ट लाइब्रेरी बहुत अच्छी लगती है। यह माइक्रोसॉफ्ट "एमएलएंग" एपीआई को लपेटता है, जो शायद सकल है, लेकिन ऐसा लगता है कि यह सबसे अच्छा समाधान है –

0

यूटीएफ -8 इस तरह से डिज़ाइन किया गया है कि लैबिन 1 को डीकोड किए जाने वाले मनमाने ढंग से 8 बिट-एन्कोडिंग में एन्कोड किए गए टेक्स्ट की संभावना नहीं है यूटीएफ -8 का उपयोग कर उचित यूनिकोड।

तो कम से कम दृष्टिकोण (, मैं नेट में बात नहीं करते स्यूडोकोड) यह है:

कोशिश: यू = some_text.decode ("UTF-8") UnicodeDecodeError को छोड़कर: यू = some_text। डीकोड ("सबसे अधिक संभावना-एन्कोडिंग")

सबसे अधिक संभावना-एन्कोडिंग के लिए आमतौर पर उदाहरण का उपयोग करता है लैटिन 1 या सीपी 1252 या जो भी हो। अधिक परिष्कृत दृष्टिकोण & भाषा-विशिष्ट वर्ण जोड़ों को खोजने का प्रयास कर सकते हैं, लेकिन मुझे ऐसा कुछ पता नहीं है जो पुस्तकालय या कुछ ऐसे के रूप में करता है।

3

आपको रेमंड चेन द्वारा इस लेख को पढ़ना चाहिए। उन्होंने कहा कि कार्यक्रमों लगता है कि कैसे कर सकते हैं क्या कोई एन्कोडिंग है (और मजेदार है कि अनुमान लगाने से आता है में से कुछ)

http://blogs.msdn.com/oldnewthing/archive/2004/03/24/95235.aspx

0

एक hacky तकनीक पाठ का एक MD5 लेने के लिए, तो पाठ को डिकोड हो सकता है पर विस्तार में चला जाता है और विभिन्न एन्कोडिंग में इसे फिर से एन्कोड करें, प्रत्येक को MD5'ing। यदि कोई आपको लगता है कि यह एन्कोडिंग है।

यह कुछ ऐसी फाइलों के लिए स्पष्ट रूप से बहुत धीमा है जो बहुत सारी फाइलें संभालती है लेकिन पाठ संपादक की तरह कुछ के लिए मैं इसे काम कर सकता हूं।

हाथ अन्य कि तुलना में, यह हो जाएगा गंदा कि डेल्फी तो सवाल से आया this post से जावा पुस्तकालयों पोर्टिंग, या IE MLang सुविधा का उपयोग कर।

0

मेरी (हाल ही में) इसका जवाब देखें (जहाँ तक मैं बता सकता हूँ, समतुल्य) प्रश्न: How can I detect the encoding/codepage of a text file

ऐसा लगता है कि MLang और NCharDet करना संभव "राष्ट्रीय" एनकोडिंग की श्रेणी में लगता है कि करने के लिए प्रयास नहीं करता है, बल्कि आपको लगता है कि आपको किस प्रकार की गैर-यूनिकोड फाइलों का सामना करना पड़ सकता है। जहां तक ​​मैं आपके प्रश्न से कह सकता हूं, इसे आपकी समस्या को बहुत भरोसेमंद ढंग से संबोधित करना चाहिए (एमएलएंग के "ब्लैक बॉक्स" पर निर्भर किए बिना)।

1

मुझे Pude के साथ अच्छी किस्मत थी, Mozilla Universal Charset Detector का बंदरगाह।

संबंधित मुद्दे

 संबंधित मुद्दे