【问题标题】:"EF BB BF" at the beginning of JSON files created in Visual Studio在 Visual Studio 中创建的 JSON 文件开头的“EF BB BF”
【发布时间】:2017-05-21 15:00:56
【问题描述】:

我的一个项目中有一堆JSON 文件设置为Embedded resource。我正在使用Newtonsoft.Json 来解析这些文件:

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 中引发异常,因为它无法解析文件的开头。在这种情况下,最佳做法是什么?我应该如何处理这种情况?

谢谢!

【问题讨论】:

    标签: c# .net json json.net


    【解决方案1】:

    这是一个字节顺序标记 (BOM)。

    我假设您的第一个代码块显示了您如何获取文件。如果你想要 UTF-8 格式的文件没有 BOM,你可以使用 UTF8Encoding 构造函数来构建一个没有 BOM 的编码实例:

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

    【讨论】:

      【解决方案2】:

      更改文件的编码 - 保存时有一个小向下箭头可让您进入高级保存选项,包括编码。

      您看到的是BOM(字节顺序标记) - 它表明这是一个 Unicode 文件(我相信在这种情况下为 UTF-8)。

      你也可以直接剥离它,它应该可以毫无问题地解析。

      最好在保存文件时只处理一次,而不是在代码中重复修复。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-07-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-10
        • 1970-01-01
        • 1970-01-01
        • 2016-06-15
        相关资源
        最近更新 更多