मुझे विजुअल स्टूडियो 2010 का उपयोग कर सी # 4.0 में यूनिट टेस्ट में स्ट्रिंग की तुलना में समस्या हो रही है। यह वही टेस्ट केस विजुअल स्टूडियो 2008 (सी # 3.5 के साथ) में ठीक से काम करता है।स्ट्रिंग तुलना में यूटीएफ -8 बाइट ऑर्डर मार्कर को मैं कैसे अनदेखा कर सकता हूं?
byte[] rawData = GetData();
string data = Encoding.UTF8.GetString(rawData);
Assert.AreEqual("Constant", data, false, CultureInfo.InvariantCulture);
इस परीक्षण डीबगिंग, वहीं data
स्ट्रिंग नग्न आंखों के लिए प्रकट होता है वास्तव में शाब्दिक रूप में एक ही स्ट्रिंग को रोकने के लिए:
यहाँ प्रासंगिक कोड का टुकड़ा है। जब मैंने data.ToCharArray()
कहा, मैंने देखा कि स्ट्रिंग data
का पहला बाइट मूल्य 65279
है जो यूटीएफ -8 बाइट ऑर्डर मार्कर है। मुझे समझ में नहीं आता है कि क्यों Encoding.UTF8.GetString()
इस बाइट को चारों ओर रखता है।
मैं Encoding.UTF8.GetString()
से कैसे परिणामस्वरूप स्ट्रिंग में बाइट ऑर्डर मार्कर डाल सकता हूं?
अद्यतन: समस्या यह थी कि GetData()
, जो डिस्क से एक फ़ाइल में लिखा है, FileStream.readbytes()
का उपयोग कर फ़ाइल से डेटा पढ़ता है। मैंने इसे StreamReader
का उपयोग करके और स्ट्रिंग को Encoding.UTF8.GetBytes()
का उपयोग करके बाइट्स में परिवर्तित करके सही किया है, जो कि पहले स्थान पर किया जाना चाहिए था! पूरी सहायताके लिए शुक्रिया।
यदि आप एक छोटे, लेकिन पूरा, कार्यक्रम है कि समस्या को दर्शाता है पोस्ट कर सकते हैं? –