Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

"EF BB BF" at the beginning of JSON files created in Visual Studio

I have a bunch of JSON files set as Embedded resource in one of my projects. I'm using Newtonsoft.Json to parse these files:

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;

This throws an exception in Newtonsoft.Json because it can't parse the beginning of the file. What's the best practice in this case? How should I be handling this sort of situations?

Thanks!

like image 387
Reynevan Avatar asked May 21 '17 15:05

Reynevan


2 Answers

That's a byte-order mark (BOM).

I'm assuming your first code block is showing how you get the file. If you want the files in UTF-8 without a BOM, you can use the UTF8Encoding constructor to build an encoding instance without a BOM:

var str = new UTF8Encoding(false).GetString(result);
like image 67
T.J. Crowder Avatar answered Nov 04 '22 19:11

T.J. Crowder


Change the encoding of the file - when saving there is a little down arrow that lets you go to advanced saving options, including the encoding.

What you are seeing is the BOM (Byte Order Mark) - it indicates this is a Unicode file (UTF-8 in this case, I believe).

You can also just strip it, which should let it parse without issue.

This is something that is best just dealt with once, when saving the file than repeatedly fixing in code.

like image 33
DigiFriend Avatar answered Nov 04 '22 21:11

DigiFriend