2017-05-21 56 views
2

我的一個項目中有一堆JSON文件設置爲Embedded resource。我使用Newtonsoft.Json分析這些文件:在EF Studio創建的JSON文件的開始部分,「EF BB BF」

public static string ReadStringFromStream(string streamName) 
{ 
    using (System.IO.Stream stream = new EmbeddedResourceReader().GetType().Assembly.GetManifestResourceStream(streamName)) 
    { 
     byte[] result = new byte[stream.Length]; 
     stream.Read(result, 0, (int)stream.Length); 
     var str = Encoding.UTF8.GetString(result); 
     return str; 
    } 
} 
... 

var traits = JsonConvert.DeserializeObject<Genre[]>(EmbeddedResourceReader.ReadStringFromStream("LNTCore.Genres.json")); 
Genres = traits; 

此拋出Newtonsoft.Json一個例外,因爲它無法分析該文件的開頭。這種情況下的最佳做法是什麼?我應該如何處理這種情況?

謝謝!

回答

3

這是一個字節順序標記(BOM)。

我假設你的第一個代碼塊顯示你如何獲取文件。如果您想要不帶BOM的UTF-8文件,則可以使用構造函數UTF8Encoding構建無BOM的編碼實例:

var str = new UTF8Encoding(false).GetString(result); 
0

更改文件的編碼 - 保存時有一個向下箭頭,可讓您轉到高級保存選項(包括編碼)。

你看到的是BOM(Byte Order Mark) - 它表示這是一個Unicode文件(在這種情況下我相信是UTF-8)。

你也可以將它剝離,這應該讓它解析沒有問題。

這是最好的處理一次,當保存文件,而不是重複固定在代碼中。