web-dev-qa-db-ja.com

Visual Studioで作成されたJSONファイルの先頭にある「EF BB BF」

プロジェクトの1つで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で例外をスローします。この場合のベストプラクティスは何ですか?このような状況にどのように対処すべきですか?

ありがとう!

9
Reynevan

これはバイトオーダーマーク(BOM)です。

最初のコードブロックがファイルの取得方法を示していると思います。 BOMのないUTF-8のファイルが必要な場合は、 UTF8Encoding BOMなしでエンコーディングインスタンスを構築するコンストラクタ:

var str = new UTF8Encoding(false).GetString(result);
8
T.J. Crowder

ファイルのエンコードを変更します。保存するときに、エンコードを含む高度な保存オプションに移動できる小さな下矢印があります。

表示されているのは [〜#〜] bom [〜#〜] (バイトオーダーマーク)です。これは、これがUnicodeファイル(この場合はUTF-8)であることを示しています。

ストリップすることもでき、問題なく解析できるはずです。

これは、コードを繰り返し修正するよりも、ファイルを保存するときに一度だけ対処するのが最善の方法です。

0
DigiFriend