2011-04-19 12 views
9

स्ट्रिंग के लिए अलग है, मेरे पास निम्नलिखित सामग्री के साथ दृश्य स्टूडियो में एक फ़ाइल है: "{" नाम ":" पीट "}" यदि मैं निम्नलिखित कोड के साथ फ़ाइल को पढ़ता हूं तो ऐसा लगता है मूल मूल्य के साथ एक स्ट्रिंग:सी # बाइट सरणी में फ़ाइल

string jsonResponse = "{\"Name\":\"Pete\"}"; 

क्यों:

byte[] byteArray = System.IO.File.ReadAllBytes(filePath); 
string jsonResponse = System.Text.Encoding.UTF8.GetString(byteArray); 

हालांकि, स्ट्रिंग वास्तव में संस्करण मौजूद है कि अगर मैं निम्नलिखित कोड का उपयोग करने के अलग है? (कारण मुझे लगता है कि यह अलग है क्योंकि जब मैं प्रत्येक संस्करण को जेसन deserializer में पास करता हूं तो यह अलग-अलग व्यवहार करता है)

धन्यवाद।

+0

स्ट्रिंग किस तरह से अलग है? –

+0

फ़ाइल सामग्री वास्तव में क्या हैं? क्या आप इसे किसी भी ** आसपास के ** कोट्स के बिना कोड-ब्लॉक के रूप में पोस्ट कर सकते हैं (लेकिन वास्तव में फ़ाइल में मौजूद किसी भी उद्धरण के साथ), तो हम सामग्री के बारे में बिल्कुल निश्चित हो सकते हैं? इसके अलावा - मुझे लगता है कि यह * बचाया * यूटीएफ 8 के साथ था? –

+0

यह फ़ाइल में है: {"संपर्क": "पीट"} असल में यह एक ब्रैकेट के साथ शुरू होता है, और एक ब्रैकेट के साथ समाप्त होता है और वीएस -2008 के साथ बनाया गया था। – Journeyman

उत्तर

8

प्रश्न में अपने अंतिम टिप्पणी को देखते हुए, मुझे लगता है समस्या यह है कि आप फ़ाइल के शुरू में एक byte-order mark मिल गया है कि। इस के बजाय तरह फ़ाइल लोड करें:

string jsonResponse = File.ReadAllText(filePath); 

मैं है कि आप के लिए बीओएम हटेगा मानना ​​है । वैकल्पिक रूप से, आप इसे स्वयं को ट्रिम करने का प्रयास कर सकते हैं:

jsonResponse = jsonResponse.TrimStart('\feff'); 
+0

हाँ , यह तय है। बहुत बहुत धन्यवाद। – Journeyman

4

मेरा अनुमान है कि आपकी फ़ाइल में एक नई समय सीमा समाप्त हो जाएगी।

आप आसानी से सत्यापित कर सकते हैं कि दो स्ट्रिंग्स में सी # में समान सामग्री है, तो उन्हें a == b से तुलना करके।

यहां एक छोटा कोड नमूना है जो आपको समस्या की पहचान करने में मदद कर सकता है। तार < > से घिरे आउटपुट हैं, जो आपको आसपास के व्हाइटस्पेस की पहचान करने में मदद कर सकते हैं (जिस तरह से, String.Trim का उपयोग करके हटाया जा सकता है)।

byte[] byteArray = System.IO.File.ReadAllBytes(filePath); 
string fromFile = System.Text.Encoding.UTF8.GetString(byteArray); 
string fromString = "{\"Name\":\"Pete\"}"; 

if (fromFile == fromString) { 
    Console.WriteLine("Strings are the same."); 
} else { 
    Console.WriteLine("Strings are different!"); 
    Console.WriteLine("fromFile: <" + fromFile + ">"); 
    Console.WriteLine("fromString: <" + fromString + ">"); 
} 
संबंधित मुद्दे