/ / स्ट्रिंग बदलें, जो पहले से ही विकृत है - c #, एन्कोडिंग, utf-8, स्ट्रीमरीडर, डिकोडिंग

एक स्ट्रिंग को कनवर्ट करें, जो पहले से ही खराब है - सी #, एन्कोडिंग, यूटीएफ -8, स्ट्रीमreader, डीकोडिंग

मेरे पास एक वर्ग है, जो एक अन्य वर्ग का उपयोग करता है जो एक टेक्स्टफ़ाइल पढ़ता है। Textfile Ascii में लिखा गया है या CP1525 स्पष्ट है।

पृष्ठभूमि की जानकारी: Textfile Axapta में उत्पन्न होता है और ASCIIio क्लास का उपयोग करता है जो राइटरॉ विधि का उपयोग करके टेक्स्ट लिखता है

जिस वर्ग का मैं उपयोग कर रहा हूं वह एक कोलीग द्वारा है और वह फाइलों को पढ़ने के लिए C # StreamReader का उपयोग कर रहा है। आम तौर पर यह ठीक काम करता है क्योंकि फाइलें UTF8 में लिखी जाती हैं, लेकिन इस विशेष मामले में यह tn नहीं है।

तो Streamreader फ़ाइल को UTF8 और के रूप में पढ़ता हैमेरे लिए रीड स्ट्रिंग पास करता है। अब मेरे पास कुछ पत्र हैं, उदाहरण के लिए डायटिंग (ö) के साथ लाटिंग छोटे अक्षर ओ जो "टी के रूप में उत्पन्न हुए क्योंकि मुझे उनकी आवश्यकता होगी

इस मामले में स्ट्रिंग doesn "टी मदद की एक साधारण कन्वर्ट और मैं सही पत्र कैसे प्राप्त कर सकते हैं" यह पता नहीं लगा सकता।

तो यह मूल रूप से है कि वह इसे कैसे पढ़ता है:

char quotationChar = """;
String line = "";
using (StreamReader reader = new StreamReader(fileName))
{
if((line = reader.ReadLine()) != null)
{
line = line.Replace(quotationChar.ToString(), "");
}
}
return line;

अब क्या होता है, Textfile में मेरे पास जर्मन शब्द "Röhre" है, जिसे स्ट्रीमरडर के साथ पढ़ने के बाद, R hre (जो एक डेटाबेस में बेवकूफ दिखता है) में बदल जाता है।

मैं हर पत्र को बदलने की कोशिश कर सकता था

Encoding enc = Encoding.GetEncoding(1252);
byte[] utf8_Bytes = new byte[line.Length];
for (int i = 0; i < line.Length; ++i)
{
utf8_Bytes[i] = (byte)line[i];
}
String propEncodeString = enc.GetString(utf8_Bytes, 0, utf8_Bytes.Length);

यह मुझे सही चरित्र नहीं देता है!

byte[] myarr = Encoding.UTF8.GetBytes(line);
String propEncodeString = enc.GetString(myarr);

वह भी गलत चरित्र लौटाता है।

मुझे पता है कि मैं इस का उपयोग करके समस्या को हल कर सकता हूं:

using (StreamReader reader = new StreamReader(fileName, Encoding.Default, true))

लेकिन सिर्फ मनोरंजन के लिए: मैं पहले से ही गलत तरीके से डिकोड किए गए स्ट्रिंग से सही स्ट्रिंग कैसे प्राप्त कर सकता हूं?

उत्तर:

उत्तर № 1 के लिए 1

एक बार UTF8 से ASCII रूपांतरण पहली बार किया जाता है,सभी वर्ण जो "ASCII प्रविष्टियों को मान्य करने के लिए टी मैप को बदलते हैं, उन्हें उसी खराब डेटा वर्ण से बदल दिया जाता है जिसका अर्थ है कि डेटा अभी खो गया है और आप एक अच्छे चरित्र के डाउनस्ट्रीम में वापस" t "" कन्वर्ट "कर सकते हैं। इस उदाहरण को देखें: https://dotnetfiddle.net/XWysml