2012-11-29 14 views
5

मैं, विदेशी कोडिंग प्रणाली में एक इनपुट स्ट्रिंग है यानी डाली: "\\U+1043\\U+1072\\U+1073\\U+1072\\U+1088\\U+1080\\U+1090\\U+1085\\U+1086\\U+1089\\U+1090\\U+1100"पाठ कोड प्रकार का निर्धारण और डिफ़ॉल्ट

और मैं मेरा डिफ़ॉल्ट कोड प्रणाली (System.Text.Encoding.Default) को कास्ट करना चाहते हैं:

-  System.Text.Encoding.Default {System.Text.SBCSCodePageEncoding} System.Text.Encoding {System.Text.SBCSCodePageEncoding} 
+  [System.Text.SBCSCodePageEncoding] {System.Text.SBCSCodePageEncoding} System.Text.SBCSCodePageEncoding 
     BodyName "koi8-r" string 
     CodePage 1251 int 
+  DecoderFallback {System.Text.InternalDecoderBestFitFallback} System.Text.DecoderFallback {System.Text.InternalDecoderBestFitFallback} 
+  EncoderFallback {System.Text.InternalEncoderBestFitFallback} System.Text.EncoderFallback {System.Text.InternalEncoderBestFitFallback} 
     EncodingName "Cyrillic (Windows)" string 
     HeaderName "windows-1251" string 
     IsBrowserDisplay true bool 
     IsBrowserSave true bool 
     IsMailNewsDisplay true bool 
     IsMailNewsSave true bool 
     IsReadOnly true bool 
     IsSingleByte true bool 
     WebName "windows-1251" string 
     WindowsCodePage 1251 int 

मैं कोड सिस्टम कैसे निर्धारित कर सकता हूं और इसे कैसे डाला जा सकता हूं?

+0

क्या आप जानते हैं कि फ़ाइल या फ़ाइल का हिस्सा सफल रूपांतरण के बाद क्या होना चाहिए? – Jodrell

+0

विदेशी द्वारा, क्या आपका मतलब कुछ अन्य अज्ञात एन्कोडिंग – Jodrell

+0

> विदेशी द्वारा है, क्या आपका मतलब कुछ अन्य अज्ञात एन्कोडिंग हाँ – psct

उत्तर

11

मुझे यकीन है कि मैं वास्तव में अपने प्रश्न समझ में अगर नहीं हूँ।

नेट में, आप तो एक स्ट्रिंग वस्तु है जब आप विभिन्न एन्कोडिंग के बारे में परवाह करने की जरूरत नहीं। सभी .NET तार एक ही एन्कोडिंग का उपयोग करते हैं: यूनिकोड (या अधिक सटीक: यूटीएफ -16)।

विभिन्न पाठ्य एनकोडिंग्स केवल भूमिका निभाते हैं, जब आप एक बाइट क्रम में एक स्ट्रिंग वस्तु बारी (जैसे किसी पाठ फ़ाइल में यह लिखने के लिए) या ठीक इसके विपरीत। मुझे लगता है कि आप इसके बारे में बात कर रहे हैं। एक से दूसरे एन्कोडिंग से एक बाइट क्रम बदलने के लिए, आप लिख सकते हैं:

byte[] input = ReadInput(); // e.g. from a file 
Encoding decoder = Encoding.GetEncoding("encoding of input"); 
string str = decoder.GetString(input); 
Encoding encoder = Encoding.GetEncoding("encoding of output"); 
byte[] ouput = encoder.GetBytes(str); 

बेशक आप उचित इनकोडिंग नाम के साथ encoding of input और encoding of output को बदलने के लिए की जरूरत है। एमएसडीएन में list of all supported encodings है।

आप या तो प्रथा के अनुसार या मेटाडाटा या कुछ और पर आधारित है, इनपुट की एन्कोडिंग जानना चाहते हैं। आप किसी अज्ञात एन्कोडिंग को विश्वसनीय रूप से निर्धारित/अनुमानित नहीं कर सकते हैं, लेकिन कुछ चाल और हेरिस्टिक हैं जिन्हें आप लागू कर सकते हैं। How can I detect the encoding/codepage of a text file देखें।

संपादित करें:

"U + xxxx" कैसे आप आमतौर पर (संख्या यूनिकोड वर्ण को सौंपना) एक विशिष्ट यूनिकोड कोड बिंदु का उल्लेख किया जाता है, जैसे कि पत्र "ए" (लैटिन राजधानी ए) का कोड बिंदु यू + 0041 है।

क्या आपकी इनपुट स्ट्रिंग वास्तव में "\\U+1043..." (बैकस्लैश, बैकस्लैश, पूंजी यू इत्यादि) है या यह केवल इस तरह प्रदर्शित होती है। एक डीबगर खिड़की में? या वर्ण को जानबूझ कर एक भाग निकले तरीका उन्हें लिखने के लिए बचाया गया: यदि यह तो पहली है किसी को है, जबकि, पाठ एन्कोडिंग शायद एक यूनिकोड शाब्दिक लिखने की कोशिश कर और गलती से एक दूसरा (EDIT2 लिख कर बैकस्लैश से बचने के द्वारा एक गलती की है एक ASCII- एन्कोडेड फ़ाइल/स्ट्रीम/आदि में)। जहां तक ​​मुझे पता है, .NET एन्कोडिंग कक्षाएं आपकी मदद नहीं करती हैं; आपको हाथ से स्ट्रिंग को पार्स करने की आवश्यकता है।

वैसे, आपके उदाहरण की संख्या अजीब है। मानक नोटेशन में, "यू +" के बाद संख्या एक हेक्स संख्या है, दशमलव संख्या नहीं। लेकिन यदि आप हेक्स संख्याओं के रूप में कोड पॉइंट पढ़ते हैं तो वे पूरी तरह से असंबंधित स्क्रिप्ट सिस्टम (बर्मी, जॉर्जियाई मखेड्रुली, हंगुल जामो) के पात्रों को संदर्भित करते हैं; दशमलव संख्या के रूप में पढ़ें, हालांकि वे सभी सिरिलिक अक्षरों को संदर्भित करते हैं।

Edit3: उसे पार्स करने के लिए, अच्छी तरह से, प्रपत्र \\U+xxxx में सबस्ट्रिंग के लिए देखो, एक पूर्णांक n करने के लिए xxxx कनवर्ट करते हैं, कि कोड बिंदु (Char.ConvertFromUtf32(n)) के साथ एक चार बनाने (एक्स अंक के होने के साथ) और पूरे की जगह उस char द्वारा सबस्ट्रिंग।

+0

ठीक है, मैंने सोचा, धन्यवाद। – psct

+0

क्षमा करें, लेकिन मैं समस्या का समाधान नहीं कर सका। आप लिखते हैं कि यूटीएफ -16 डिफ़ॉल्ट एन्कोडिंग है .NET लेकिन क्यों System.Text.Encoding.Default koi8-r है? या यह केवल गैर नेट स्ट्रिंग्स के लिए उपयोग किया जाता है और इसे utf-16 में परिवर्तित करने के बजाय? इसलिए, मुझे "\\ U + 1043 ..." स्ट्रिंग में एन्कोडिंग निर्धारित करने में समस्याएं हैं, क्या आप कृपया मेरी मदद कर सकते हैं (मैं cp1251, utf-8/16, koi8-r और कई अन्य emacs में कोशिश कर रहा हूं लेकिन मैं नहीं कर सका उपयुक्त पाया)? – psct

+1

@psct: नहीं, यूटीएफ -16 डिफ़ॉल्ट एन्कोडिंग नहीं है, यह .NET तारों का आंतरिक एन्कोडिंग है। डिफ़ॉल्ट एन्कोडिंग आपके सिस्टम की संस्कृति सेटिंग्स पर निर्भर करता है। –

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