您可以这样做来跳过从流中读取时的BOM字节。但是,您需要扩展Bom.cs以包括更多编码,不过据我所知,UTF是唯一使用BOM的编码...虽然可能会有错。
我从
这里获得了有关编码类型的信息。
using (var stream = File.OpenRead("path_to_file"))
{
stream.Position = Bom.GetCursor(stream);
}
public static class Bom
{
public static int GetCursor(Stream stream)
{
if (IsMatch(stream, new byte[] {0x00, 0x00, 0xFE, 0xFF}))
return 4;
if (IsMatch(stream, new byte[] { 0xFF, 0xFE, 0x00, 0x00 }))
return 4;
if (IsMatch(stream, new byte[] { 0xFE, 0xFF }))
return 2;
if (IsMatch(stream, new byte[] { 0xFF, 0xFE }))
return 2;
if (IsMatch(stream, new byte[] { 0xEF, 0xBB, 0xBF }))
return 3;
return 0;
}
private static bool IsMatch(Stream stream, byte[] match)
{
stream.Position = 0;
var buffer = new byte[match.Length];
stream.Read(buffer, 0, buffer.Length);
return !buffer.Where((t, i) => t != match[i]).Any();
}
}