2009-03-20 14 views
17

उदाहरण के लिए: "आधा" या ASCII दिसम्बर 189 जब मैं फ़ाइल बाइट [] यूनिकोड प्रतिस्थापन चरित्र 65533 में यूनिकोड परिणाम में कनवर्ट कर इस मामले 189मैं विस्तारित एएससीआई को सिस्टम में कैसे परिवर्तित कर सकता हूं। स्ट्रिंग?

में, वैध मान है एक पाठ से बाइट्स पढ़

यूनिकोड एन्कोडिंग। यूनिकोड.गेटस्ट्रिंग (बी);

एएससीआईआई परिणामों में 63 या "?" में कनवर्ट करना

ASCIIEncoding.ASCII.GetString (बी);

यदि यह संभव नहीं है तो इस डेटा को संभालने का सबसे अच्छा तरीका क्या है? मैं स्ट्रिप्स फ़ंक्शन जैसे रीप्लेस() को करने में सक्षम होना चाहता हूं।

उत्तर

24

बाइट 189 एक "आधा" ISO-8859-1 में (उर्फ "लैटिन -1") का प्रतिनिधित्व करता है, तो निम्नलिखित तुम क्या चाहते हो सकता है है:

var e = Encoding.GetEncoding("iso-8859-1"); 
var s = e.GetString(new byte[] { 189 }); 

सभी श्रृंखलाएं और .NET में वर्ण हैं यूटीएफ -16 एन्कोडेड, इसलिए आपको किसी और चीज को बदलने के लिए एन्कोडर/डिकोडर का उपयोग करने की आवश्यकता है, कभी-कभी यह डिफॉल्ट होता है (उदाहरण के लिए फाइलस्ट्रीम उदाहरणों के लिए यूटीएफ -8) लेकिन अच्छा अभ्यास हमेशा निर्दिष्ट करना है।

आपको एन्कोडिंग के बारे में जानकारी प्रदान करने के लिए आपको कुछ अंतर्निहित या बेहतर (बेहतर) स्पष्ट मेटाडेटा की आवश्यकता होगी।

+1

यह एन्कोडिंग सामान मुझे पागल कर रहा है ... लेकिन आपके जवाब ने मेरे लिए चाल की है !!! यह जानने के लिए मुझे थोड़ी देर लग गई कि क्या खोजना है, लेकिन आखिर में मैंने यह पता लगाया कि उचित खोज शब्द क्या होना चाहिए। :) मुझे मेरी समस्या के लिए एक सरल समाधान प्रदान करने के लिए धन्यवाद। :) – Dave

10

यह एन्कोडिंग क्या है पर निर्भर करता है।

"ASCII 189" जैसी कोई चीज़ नहीं है - ASCII केवल 127 तक जाती है। कई एन्कोडिंग हैं जो पहले 128 मानों के लिए ASCII का उपयोग करते हुए 8-बिट एन्कोडिंग हैं।

आप Encoding.Default (जो आपके विशेष सिस्टम के लिए डिफ़ॉल्ट एन्कोडिंग है) चाहते हैं, लेकिन यह सुनिश्चित करना मुश्किल है। आपका डेटा कहां से आया?

+0

मैं क्या पढ़ रहा हूँ में तब्दील करने के लिए है बाइट [] लाइनों में 188 - 1 9 0 के साथ इस विस्तारित एसीआई चार्ट में: http://charlie.balch.org/asp/ascii.asp। एन्कोडिंग। डीफॉल्ट ने चाल की।बहुत बहुत धन्यवाद! – rtremaine

+1

खुशी हुई यह काम करता है - बस जागरूक रहें कि जो भी "विस्तारित ASCII" के बारे में बात करता है, जैसे इसका मतलब है कि एक विशेष एन्कोडिंग यह नहीं जानता कि वे किस बारे में बात कर रहे हैं। यह "एक डॉलर" के बारे में बात करने जैसा है - एक अमेरिकी डॉलर, ऑस्ट्रेलियाई डॉलर, कनाडाई डॉलर, क्या? यह किसी विशेष संदर्भ –

+0

में समझ में आता है लेकिन यह एक निश्चित और अद्वितीय विचार नहीं है। इसलिए मुझे लगता है कि "विस्तारित ASCII" के चार्ली का विचार * उसकी * संस्कृति के लिए उपयुक्त है - लेकिन इससे मेल नहीं खाया जाएगा कि कुछ अन्य लोगों के कंप्यूटर पर क्या होता है। –

12

पुराना पीसी -8 या विस्तारित एएससीआईआईआई चरित्र सेट आईबीएम से पहले था और माइक्रोसॉफ्ट ने पीसी पेज पर कोड पेजों के विचार को पेश किया। यह विस्तारित एएससीआईआई - 1 9 82 में था। असल में, यह उस समय पीसी पर उपलब्ध एकमात्र चरित्र सेट था, जब तक ईजीए कार्ड ने आपको वीआरएएम में अन्य फोंट लोड करने की इजाजत नहीं दी।

यह एएनएसआई टर्मिनलों के लिए भी डिफ़ॉल्ट मानक था, और 80 के दशक और 90 के शुरुआती दशक में डायल किए गए लगभग हर बीबीएस ने मेनू और बक्से प्रदर्शित करने के लिए इस चरित्र सेट का उपयोग किया था।

यूनिकोड टेक्स्ट में 8-बिट विस्तारित ASCII को चालू करने के लिए कोड यहां दिया गया है। कोड की कुंजी बिट नोट करें: GetEncoding ("437")। उसने 8-बिट ASCII पाठ को यूनिकोड समकक्ष में अनुवाद करने के लिए कोड पृष्ठ 437 का उपयोग किया।

string ASCII8ToString(byte[] ASCIIData) 
    { 
     var e = Encoding.GetEncoding("437"); 
     return e.GetString(ASCIIData); 
    } 
+0

वाह! धन्यवाद! साइड-नोट के रूप में, आपका उत्तर एक बाइट सरणी को स्ट्रिंग और बैक में कैसे चालू करना है, इसके लिए भी वास्तव में एक अच्छा समाधान है। – mike

1

System.String[] नहीं कर सकते ASCII > 127 साथ दुकान पात्रों जैसे œ ¢ ½ ¾here अगर आप किसी भी विस्तारित ASCII वर्ण पर काम करने की कोशिश कर रहे हैं विधि यह उनके द्विआधारी और दशमलव बराबर

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

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