2009-02-26 12 views
49

का उपयोग कर विदेशी अक्षरों को पढ़ने में सहायता करें मैं विदेशी अक्षरों वाले टेक्स्ट फ़ाइल को पढ़ने के लिए नीचे दिए गए कोड का उपयोग कर रहा हूं, फ़ाइल एएनएसआई एन्कोड किया गया है और नोटपैड में ठीक दिखता है। नीचे दिया गया कोड काम नहीं करता है, जब फ़ाइल मान पढ़े जाते हैं और डेटाग्रिड में दिखाए जाते हैं तो अक्षर वर्ग के रूप में दिखाई देते हैं, क्या कहीं और समस्या हो सकती है?सी # StreamReader

StreamReader reader = new StreamReader(inputFilePath, System.Text.Encoding.ANSI); 
using (reader = File.OpenText(inputFilePath)) 

धन्यवाद

अद्यतन 1: मैं सब एनकोडिंग System.Text.Encoding के नीचे पाया की कोशिश की है। और सभी फ़ाइल को सही ढंग से दिखाने में विफल रहते हैं।

अद्यतन 2: मैं फ़ाइल इनकोडिंग बदल दिया है यूनिकोड को (फ़ाइल resaved) और System.Text.Encoding.Unicode का इस्तेमाल किया और यह ठीक काम किया। तो नोटपैड ने इसे सही तरीके से क्यों पढ़ा? और System.Text.Encoding.Unicode एएनएसआई फ़ाइल क्यों नहीं पढ़ी?

+0

क्या आप वाकई एएनएसआई में एन्कोड किए गए हैं? कभी-कभी नोटपैड "सर्वश्रेष्ठ अनुमान" का प्रयास करेगा और आपकी अपेक्षा से अलग एन्कोडिंग का उपयोग करेगा। –

+0

यदि नोटपैड निर्धारित करता है कि फ़ाइल यूनिकोड या यूटीएफ -8 नहीं है, तो यह सिस्टम लोकेल (नियंत्रण कक्ष -> क्षेत्र और भाषा क्षेत्र में सेट) पर वापस आ जाएगी। –

उत्तर

21

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

+0

UTF8Encoding.UTF8 मेरे लिए काम किया। –

5

एन्कोडिंग.यूटीएफ 8 जैसे एक अलग एन्कोडिंग आज़माएं। आप StreamReader को एन्कोडिंग स्वयं को खोजने का भी प्रयास कर सकते हैं:

StreamReader reader = new StreamReader(inputFilePath, System.Text.Encoding.UTF8, true) 

संपादित करें: बस अपना अपडेट देखा। StreamReader अनुमान लगाने के लिए प्रयास करें।

108

आप डिफ़ॉल्ट एन्कोडिंग भी आज़मा सकते हैं, जो वर्तमान सिस्टम के एएनएसआई कोडपेज का उपयोग करता है।

StreamReader reader = new StreamReader(inputFilePath, Encoding.Default, true) 

जब आप मूल फ़ाइल के साथ नोटपैड "सेव एज़" मेनू का उपयोग करने का प्रयास करते हैं, तो एन्कोडिंग कॉम्बो बॉक्स देखें। यह आपको बताएगा कि कौन सी एन्कोडिंग नोटपैड अनुमानित फ़ाइल द्वारा उपयोग किया जाता है।

इसके अलावा, अगर यह एक एएनएसआई फ़ाइल है, तो detectEncodingFromByteOrderMarks पैरामीटर शायद अधिक मदद नहीं करेगा।

+1

डिफ़ॉल्ट एन्कोडिंग का उपयोग मेरे लिए काम किया। मेरे पास char (Â) था जिसे StreamReader द्वारा छोड़ा जा रहा था और इसे डिफ़ॉल्ट रूप से बदलना एन्कोडिंग को सही ढंग से पढ़ने की अनुमति थी। धन्यवाद! – buzzzzjay

+1

एन्कोडिंग। डीफॉल्ट ने मेरे लिए काम किया ... एएनएसआई प्रारूप में स्पैनिश पात्रों को पढ़ा और लिखा जाएगा%^और? एन्कोडिंग का उपयोग करने से पहले। डीफॉल्ट। – BoilerBrad

+0

एन्कोडिंग। डीफॉल्ट भी मेरे लिए काम करता है। यहां चारों ओर पुर्तगाली वर्ण। –

8

एन्कोडिंग का उपयोग करना। यूनिकोड एक एएनएसआई फ़ाइल को सटीक रूप से डीकोड नहीं करेगा जैसा कि एक जेपीईजी डिकोडर जीआईएफ फ़ाइल को समझ नहीं पाएगा।

मुझे आश्चर्य है कि Encoding.Default एएनएसआई फ़ाइल के लिए काम नहीं किया हूँ अगर यह वास्तव में एएनएसआई था - अगर तुम कभी बिल्कुल जो कोड पेज नोटपैड उपयोग कर रहा था, तो आप Encoding.GetEncoding(int) इस्तेमाल कर सकते हैं पता लगाना।

सामान्य रूप से, जहां संभव हो मैं यूटीएफ -8 का उपयोग करने की सिफारिश करता हूं।

3

फ़ाइल। ओपनटेक्स्ट() हमेशा एक यूटीएफ -8 स्ट्रीम रीडर का उपयोग करता है। इसके बजाए अपना खुद का StreamReader उदाहरण बनाएं और वांछित एन्कोडिंग निर्दिष्ट करें।

तरह
using (StreamReader reader = new StreamReader(@"C:\test.txt", Encoding.Default) 
{ 
// ... 
} 
18

मैं एक ही समस्या थी और मेरे समाधान सरल था:

Encoding.ASCII 

उपयोग

Encoding.GetEncoding("iso-8859-1") 

के बजाय जवाब here मिला था।

संपादित करें: अधिक समाधान। यह हो सकता है और अधिक सटीक एक:

Encoding.GetEncoding(1252); 

इसके अलावा, कुछ मामलों में तो यह आपके लिए भी अपने OS डिफ़ॉल्ट एन्कोडिंग फ़ाइल एन्कोडिंग से मेल खाती है, तो काम करेगा:

Encoding.Default; 
+0

मेरी समस्या 'स्ट्रिंगबिल्डर' और आउटपुट को 'HttpResponseMessage'' का उपयोग कर रही थी, और उच्चारण को प्रतिस्थापित किया जा रहा था। यह काम किया ('result' है' HttpResponseMessage') 'result.Content = नए StringContent (csv.ToString(), Encoding.GetEncoding (" ISO-8859-1 "));' –

+0

यह मैं भी था। किसी कारण से 'नया स्ट्रीम रीडर (मेमोरीस्ट्रीम, एनकोडिंग.यूटीएफ 8)' काम नहीं कर रहा था, लेकिन 'नया स्ट्रीम रीडर (मेमोरीस्ट्रीम, एन्कोडिंग। गेट एन्कोडिंग ("आईएसओ -885 9 -1"))' किया था! –

+0

किसी ने ¾ (विस्तारित एएससीआई, यूनिकोड नहीं) के साथ मेरी समस्या को ठीक किया है जिसे किसी ने उपयोग करने का निर्णय लिया है। –

0

मैं पुर्तगाली वर्ण पढ़ने की मेरी समस्या हल, बदल रहा है नोटपैड ++ पर स्रोत फ़ाइल।

enter image description here

सी #

var url = System.Web.HttpContext.Current.Server.MapPath(@"~/Content/data.json"); 
    string s = string.Empty; 
    using (System.IO.StreamReader sr = new System.IO.StreamReader(url, System.Text.Encoding.UTF8,true)) 
    { 
      s = sr.ReadToEnd(); 
    } 
0
अरबी के लिए

, मैं Encoding.GetEncoding(1256) इस्तेमाल किया। यह अच्छा काम कर रहा है।

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