2013-02-22 32 views
7

मैंने ओपनऑफिस लेखक से नोटपैड से चिपकाने की प्रतिलिपि बनाते समय सभी विशेष पात्रों को लोड करने के लिए एक नमूना ऐप बनाया। डबल कोड अलग-अलग होते हैं और जब मैं इसे लोड करने का प्रयास करता हूं।सी # टेक्स्ट फ़ाइल पढ़ने में 65533 जारी करना

var lines = File.ReadAllLines("..\\ter34.txt"); 

यह बनाता है 65533 अंक की समस्या आती है और पाठ फ़ाइल में शामिल हैं:

+2

टेक्स्ट फ़ाइल का उपयोग करके एन्कोडिंग क्या है? एएनएसआई? ASCII? UTF8? UTF16? –

+0

समस्या केवल एएनएसआई में आती है .... बाकी चीजें सही ढंग से काम कर रही हैं, यह इसे बदलती है - "- –

+1

बस उन लोगों को जो शायद नहीं जानते। '(Char) 65533' को यू + एफएफएफडी भी कहा जाता है और यह एक प्रतिस्थापन चरित्र है। जब डेटा परिवर्तित किया जाता है तो यह अक्सर उत्सर्जित होता है, या जब एन्कोडिंग में कनवर्ट करने के लिए सही वर्ण का प्रतिनिधित्व नहीं किया जा सकता है। [विकिपीडिया] देखें (http://en.wikipedia.org/wiki/Specials_ (यूनिकोड_ब्लॉक) #Replacement_character)। –

उत्तर

20

U+FFFD "यूनिकोड प्रतिस्थापन चरित्र" है:

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

उदाहरण के लिए, यदि आप किसी फ़ाइल बाहर ISO-8859-1 का उपयोग कर लिखते हैं, लेकिन फिर कोशिश करने के लिए पढ़ इसे प्रयोग UTF-8 है, तो आप आसानी से कुछ बाइट दृश्यों जो केवल वैध UTF नहीं हैं के साथ समाप्त कर सकता है -8। प्रत्येक अमान्य बाइट का अनुवाद (डिफ़ॉल्ट रूप से) यू + एफएफएफडी में किया जाएगा।

असल में, आपको दूसरे तर्क के रूप में File.ReadAllLines पर सही एन्कोडिंग प्रदान करने की आवश्यकता है। इसका मतलब है कि आपको पहले फ़ाइल के एन्कोडिंग को जानना होगा।

+0

विचित्र रूप से पर्याप्त, मैंने हमेशा सोचा कि यह सिर्फ कस्टम फीचर डेटा स्ट्रीमिंग/ट्रांसकोडिंग लाइब्रेरी है। और यह अच्छी तरह से परिभाषित यूनिकोड ट्रांसकोडिंग व्यवहार है? महान! – quetzalcoatl

+0

जब मैं यूटीएफ 8, यूनिकोड ..etc जैसे प्रारूपों में txt फ़ाइल को सही तरीके से सहेजता हूं लेकिन जब मैं इसे एएनएसआई में सहेजता हूं .. तो वह प्रतीक आता है –

+0

यूनिकोड फ़ाइलें कई अलग-अलग वर्ण प्रस्तुत कर सकती हैं, जबकि एएनएसआई - चयनित कोडपेज पर आश्रित, और आमतौर पर बहुत कम। जब आप कुछ 'विस्तारित' चरित्र को एएनएसआई फ़ाइल में सहेजने का प्रयास करते हैं, तो आपके पास कुछ संभावनाएं हैं कि इस चरित्र को उस एएनएसआई कोडपेज में अनुवादित नहीं किया जा सकता है जिसे आपने चुना है (या डिफॉल्ट किया गया है)। ऐसे मामलों में, तीन चीजें हो सकती हैं: एक अपवाद फेंक दिया जा सकता है और हर जगह दुर्घटनाग्रस्त हो सकती है ताकि आप देख सकें कि कोई समस्या है, या उन पात्रों को चुपचाप छोड़ दिया जा सकता है (eeviill), या, कुछ "प्रतिस्थापन चरित्र" को फ़ाइल में लिखा गया है ताकि आप देख सकें – quetzalcoatl