2010-11-11 4 views
6

.NET अनुप्रयोगों से आंतरिक एन्कोडिंग क्या है? (उदाहरण के लिए स्ट्रिंग ऑब्जेक्ट्स) क्या मैं परिभाषित कर सकता हूं कि मेरी एप्लिकेशंस का एन्कोडिंग किस प्रकार उपयोग करनी चाहिए? अगर मैं एक फ़ाइल में एक .net स्ट्रिंग लिखता हूं। स्ट्रिंग में एन्कोडिंग क्या है?.NET आंतरिक एन्कोडिंग

// संपादित

Dim test as String="Das ist ein Test" <---what Encoding has this String? 

Dim reader as New IO.StreamReader(docPath, _ 
    System.Text.Encoding.GetEncoding("shift-jis")) 

test=reader.ReadToEnd() <---and now? What Encoding has this String? 

धन्यवाद! UPDATED - - UTF-16

उत्तर

5
Dim test as String="Das ist ein Test" <---what Encoding has this String? 

UTF-16

Dim reader as New IO.StreamReader(docPath, 
    System.Text.Encoding.GetEncoding("shift-jis")) 
test=reader.ReadToEnd <---and now? What Encoding has this String? 

फिर भी UTF-16। StreamReader कक्षा बाइट्स को docPath में देखती है और उन्हें शिफ्ट-जेस एन्कोडिंग के आधार पर यूटीएफ -16 में परिवर्तित करती है।

+0

+1। –

1

आंतरिक नेट यूनिकोड उपयोग करता है।

हालांकि, अगर आप किसी फ़ाइल को स्ट्रिंग लिखते हैं, तो आपको एक एन्कोडिंग प्रदान करनी होगी। यदि आप नहीं करते हैं तो .NET आपके लिए एन्कोडिंग का चयन करेगा - यह आमतौर पर UTF8 है। यहाँ File.WriteAllText reflectored है:

public static void WriteAllText(string path, string contents) 
{ 
    if (path == null) 
    { 
     throw new ArgumentNullException("path"); 
    } 
    if (path.Length == 0) 
    { 
     throw new ArgumentException(Environment.GetResourceString("Argument_EmptyPath")); 
    } 
    InternalWriteAllText(path, contents, StreamWriter.UTF8NoBOM); 
} 
+1

असल में, प्रति कोड बिंदु 2 बाइट्स प्रति चरित्र नहीं है। उच्चारण अंक जैसी चीजें अलग-अलग कोड बिंदु हो सकती हैं लेकिन उसी चरित्र के हिस्से के रूप में मुद्रित की जा सकती हैं। इसके अलावा, यह यूटीएफ -16 का उपयोग करता है, जिसका अर्थ है कि कोड बिंदु * संभावित रूप से * 4 बाइट्स हो सकता है, हालांकि कोई भी अभ्यास में बुनियादी बहुभाषी विमान के बाहर कुछ भी नहीं उपयोग करता है। –

+0

दरअसल, यह प्रति कोड इकाई 2 बाइट्स है, कोड बिंदु नहीं :-) यू + एफएफएफएफ के ऊपर कोड बिंदुओं को यूटीएफ -16 (और .NET उपयोगकर्ता यूटीएफ -16) में 2 कोड इकाइयों की आवश्यकता होती है। System.String की परिवर्तनशीलता की कमी के लिए –

3

System.String UTF-16 है। आप इसे System.Text.Encoding कक्षा के डेरिवेटिव का उपयोग करके कई अन्य एन्कोडिंग में परिवर्तित कर सकते हैं।

संपादन के जवाब में: System.IO.StreamReader, जहां तक ​​मुझे पता है कि अगर कोई निर्दिष्ट नहीं है तो सही एन्कोडिंग के रूप में "अनुमान लगाने" की कोशिश करता है। System.IO.StreamWriter यूटीएफ -8, आईआईआरसी के रूप में लिखता है। मैं इन कक्षाओं से कम परिचित हूं इसलिए उस जानकारी को अपने जोखिम पर ले जाएं;)

2

अन्य सभी उत्तरों के रूप में: हाँ, 2 बाइट यूनिकोड (यूटीएफ -16)। और हां, आप यह नियंत्रित कर सकते हैं कि यह डिस्क पर कैसे लिखता है, जैसे @ बिली ओनेल द्वारा वर्णित।

अपने प्रश्न के बारे में चिंता करना कि क्या इसे नियंत्रित करना संभव है: नहीं, यह संभव नहीं है। .NET हमेशा आंतरिक रूप से यूनिकोड यूटीएफ -16 पर चलाएगा। इसके लिए कोई सेटिंग नहीं है।

+0

+1। –

+0

बहुत बहुत धन्यवाद :)। ओपी के कोड पर सीधे देखने के लिए और StreamReader के बारे में जानकारी के लिए –

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