2011-04-19 57 views
9

我在Visual Studio中有一個文件,其內容如下:「{」Name「:」Pete「}」 如果我用下面的代碼讀取文件,與原始值的字符串:c#讀取文件到字節數組是不同的字符串

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

但是,字符串是存在,如果我用下面的代碼版本實際上是不同的:

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

爲什麼? (我認爲它不同的原因是因爲當我將每個版本傳遞給json解串器時,它的行爲有所不同)

謝謝。

+0

字符串以何種方式不同? – 2011-04-19 11:55:56

+0

文件內容究竟是什麼?你可以將它作爲一個代碼塊發佈嗎?沒有任何**包含**引號(但實際上包含文件中的任何引號),所以我們可以確切地確定其內容?另外 - 我認爲這是*保存*與UTF8? – 2011-04-19 11:56:26

+0

這是文件中的內容:{「Contact」:「Pete」} 基本上它以括號開頭,以括號結尾,並用VS2008創建。 – Journeyman 2011-04-19 11:58:17

回答

8

鑑於該問題的最終評論,我懷疑的問題是,你有在文件的開始byte-order mark。嘗試加載文件中像這樣來代替:

string jsonResponse = File.ReadAllText(filePath); 

相信將剝離BOM爲您服務。或者,您可以嘗試明確修剪它自己:

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

是的,這是固定的,非常感謝。 – Journeyman 2011-04-19 12:08:06

4

我的猜測是你的文件中有一個終止換行符。

通過將它們與a == b進行比較,您可以輕鬆驗證兩個字符串在C#中的內容是否相同。

以下是可能幫助您識別問題的簡短代碼示例。字符串輸出被< >包圍,這應該有助於識別周圍的空白(順便說一句,可以使用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 + ">"); 
}