2012-01-26 15 views
5

है, मैं फ़ाइलों, स्ट्रीम और विभिन्न कोडपृष्ठों के लिए काफी नया हूं। यह मेरी समस्या है:सी #: कैसे पता लगाएं कि मेरे पास सही एन्कोडिंग

मुझे टेक्स्ट फाइलें मिलती हैं और उनमें से कुछ कोडपेज विंडोज -1252 के साथ बनाई गई हैं, कुछ अभी भी आईबीएम 850 हैं और कभी-कभी वे यूटीएफ 8 हैं। जब मैं उन्हें आयात करता हूं, तो मेरा डेटाबेस ä, ö, ü, ß के लिए सभी प्रकार के प्रतीकों को दिखाता है, क्योंकि मैंने उन्हें गलत कोडपृष्ठ के साथ पढ़ा है। केवल जब मैं उन्हें सही कोडपेज के साथ आयात करता हूं, तो सब कुछ ठीक काम करता है।

यह मैं क्या सोचा था सकता है एक अच्छा दृष्टिकोण होगा है: एक कोडपेज के साथ बाइट्स सरणी

Convert ä, ö, ü, ß एक्स

जैसे:

byte[] myAeKl = Encoding.GetEncoding("IBM850").GetBytes("ä"); 

byte[] myAeGr = Encoding.GetEncoding("IBM850").GetBytes("Ä"); 

के माध्यम से जाना टेक्स्ट फाइलें और उपरोक्त वाले प्रत्येक अक्षर बाइट सरणी की तुलना करें। यदि पाया गया कि कोड कोड का उपयोग करें, अन्यथा कोई अन्य कोडपृष्ठ आज़माएं।

यह वही है जो मुझे समझ में नहीं आता है: मैं टेक्स्टफाइल में अक्षरों से बाइट्स की तुलना कैसे कर सकता हूं, जिन अक्षरों को मैं ढूंढ रहा हूं। उदाहरण के लिए:

if (Textfile.Letter == myAeKl || Textfile.Letter == myAeGr) 
... 

वहाँ सही कोड पृष्ठ पर प्राप्त करने के लिए किसी भी अन्य रास्ता नहीं है? क्या मुझे समाधान के लिए सही दृष्टिकोण है?

उत्तर

0

मैं फ़ाइल को एक एन्कोडिंग के साथ लोड करने का प्रयास करूंगा और यदि मुझे अप्रत्याशित वर्ण मिलते हैं, तो इसे दूसरे के साथ लोड करें।

+0

हाय, आपके त्वरित उत्तर के लिए धन्यवाद। अच्छी तरह से समस्या यह है कि फाइलें बड़ी हो सकती हैं और आयात समय के बारे में निश्चित समय लेता है और सबसे बड़ी समस्या मैं आयात नहीं करता हूं। मैं बस इसे प्रोग्राम करने के लिए मिलता हूं :) ग्रीटज़ – Phenix

+0

"अगर मुझे सामना करना पड़ता है" प्रोग्रामेटिक रूप से था। –

3

दुर्भाग्य से एक मूर्खतापूर्ण विधि नहीं है, क्योंकि बाइट्स की एक निश्चित धारा एक से अधिक एन्कोडिंग में सार्थक हो सकती है।

ऐसा करने का एक तरीका अन्य व्यावसायिक डेटा का उपयोग कर अनुमान और हेरिस्टिक का उपयोग कर रहा है। क्या आप फ़ाइल नाम से एन्कोडिंग का अनुमान लगा सकते हैं? प्रेषक नाम की तरह, कुछ अन्य मेटाडेटा से? यदि ऐसा है, तो इसका उपयोग करके फ़िल्टर करने का प्रयास करें।

यदि नहीं, तो आप खुदाई और अनुमान लगाने का प्रयास कर सकते हैं। यदि फाइलें बड़ी हो सकती हैं, जैसा कि आप कहते हैं, तो बस देखें और टेक्स्ट का नमूना लें (कहें, पहले 512 बाइट्स, जो पर्याप्त होना चाहिए)। क्या आपके पास यह अनुमान लगाने का कोई तरीका है कि सामग्री क्या हो सकती है? क्या यह अंग्रेजी/हिब्रू में ऐसा कुछ पाठ है या ऐसा कुछ है? यदि ऐसा है, तो 512 बाइट नमूना में सामान्य शब्दों की तलाश करें। क्या फाइलों में एक निश्चित प्रारूप होता है? यदि ऐसा है, तो इसके लिए देखो। फिर लाइव नमूने पर इन परीक्षणों को चलाएं, परिणाम देखें, परीक्षणों को ट्विक करें, और फिर से प्रयास करें जब तक आपके पास एन्कोडिंग को पहचानने का अपेक्षाकृत अच्छा मौका न हो।

गुड लक!

+0

हाय, आपके सभी सुझावों के लिए बहुत बहुत धन्यवाद! अब मेरे पास उस तरह की जानकारी नहीं है। फाइलों में सभी ग्रंथ जर्मन में हैं, पहली स्थिति एक पत्र हो सकती है और अन्य फाइलों में संख्याएं हो सकती हैं। यही कारण है कि मैंने सोचा कि मेरी सबसे अच्छी शर्त बाइट्स में सबकुछ प्राप्त करने के लिए है और मुझे लगता है कि में कहीं भी, ü और ß कहीं भी धन्यवाद, मुझे उम्मीद है कि मैं मिलान करने के लिए किसी प्रकार का पैटर्न पा सकता हूं । – Phenix

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