2010-12-04 15 views
9

में रूपांतरण मेरे पास यूटीएफ 8 एन्कोडिंग में संग्रहीत XML फ़ाइल से एक पाठ पढ़ा गया है। सी # इसे पूरी तरह से पढ़ता है, मैंने डीबगर के साथ जांच की, लेकिन जब मैं इसे किसी अन्य फ़ाइल में सहेजने के लिए ASCII में परिवर्तित करने का प्रयास करता हूं तो मुझे एक मिलता है? उन जगहों पर चार जहां एक विरोधाभासी चरित्र था। उदाहरण के लिए, इस पाठ:यूटीएफ 8 से ASCII

string s = "La introducción masiva de las nuevas tecnologías de la información"; 

सहेजा जाएगा के रूप में

"La introducci?n masiva de las nuevas tecnolog?as de la informaci?n" 

मैं सिर्फ उनके लैटिन (ए, ई, मैं, ओ, यू) क्योंकि कुछ शब्दों में स्पेनिश स्वर के लिए उन्हें जगह ले सकता है होगा समझ याद करो। मैंने पहले से ही this और this प्रश्नों की कोई आवश्यकता नहीं है। तो मुझे उम्मीद है कि कोई मेरी मदद कर सकता है। दूसरे में चयनित उत्तर भी संकलित नहीं किया गया था ...!

मामले में किसी को एक बार देख ले जाना चाहता है, मेरे कोड इस एक है:

private void WriteInput(string input) 
{ 
    byte[] byteArray = Encoding.UTF8.GetBytes(input); 
    byte[] asciiArray = Encoding.Convert(Encoding.UTF8, Encoding.ASCII, byteArray); 
    string finalString = Encoding.ASCII.GetString(asciiArray); 

    string inputFile = _idFile + ".in"; 
    var batchWriter = new StreamWriter(inputFile, false, Encoding.ASCII); 
    batchWriter.Write(finalString); 
    batchWriter.Close(); 
} 

उत्तर

25

उन पात्रों में ASCII में कोई मैपिंग नहीं है। इसे सत्यापित करने के लिए Wikipedia's जैसे ASCII तालिका की समीक्षा करें। आपको विंडोज 1252 एन्कोडिंग, या "विस्तारित ASCII" में रुचि हो सकती है, क्योंकि इसे कभी-कभी कहा जाता है, जिसमें कई उच्चारण वर्णों के लिए कोड पॉइंट होते हैं, स्पेनिश शामिल थे।

var input = "La introducción masiva de las nuevas tecnologías de la información"; 
var utf8bytes = Encoding.UTF8.GetBytes(input); 
var win1252Bytes = Encoding.Convert(
       Encoding.UTF8, Encoding.GetEncoding("windows-1252"), utf8bytes); 
File.WriteAllBytes(@"foo.txt", win1252Bytes); 
+0

इस के साथ प्रयास किया, लेकिन ओ के लिए बदल गया, एक के लिए। आदि ... –

+0

@ डेविड: उपरोक्त परीक्षण मामले का उपयोग करके मेरे लिए पूरी तरह से काम करता है। सुनिश्चित करें कि आपके पास कहीं भी आपके कोड में एएससीआईआई एन्कोडिंग (एन्कोडिंग.एएससीआईआईआई) नहीं है। –

+0

इसके बारे में क्षमा करें! फिर से परीक्षण किया और एक आकर्षण की तरह काम करता है ... अब मुझे पता है कि आपके पास 18.3 के प्रतिनिधि क्यों हैं !!! ;) –

7

नहीं किया जा सकता है। ASCII में वे अक्षर नहीं हैं, इसलिए आप जो भी कर सकते हैं वह यूआरएल-एन्कोड या यूनिकोड-एस्केप-एन्कोड करना है।

+0

कैसे आते हैं? यदि एएससीआईआई में उन पत्र नहीं हैं तो मैं नोटपैड ++ का उपयोग करके यूटीएफ 8 से एएससीआईआई में एन्कोडिंग कैसे बदल सकता हूं और एक आकर्षण की तरह काम करता हूं? –

+5

क्योंकि नोटपैड ++ वास्तव में ASCII का उपयोग नहीं कर रहा है। यह सीपी 1250 जैसे कुछ का उपयोग कर रहा है, जो * उन * अक्षरों में है। –

+0

ठीक है, आपने मुझे वहां पहुंचाया है ... –

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