in src/Model/Utilities.cs [89:112]
internal static Encoding SniffByteOrderMark(byte[] bytes, int len)
{
if (len >= 3 && bytes[0] == 0xef && bytes[1] == 0xbb && bytes[2] == 0xbf)
{
return Encoding.UTF8;
}
else if (len >= 4 && ((bytes[0] == 0x00 && bytes[1] == 0x00 && bytes[2] == 0xfe && bytes[3] == 0xff) || (bytes[0] == 0xfe && bytes[1] == 0xff && bytes[2] == 0xfe && bytes[3] == 0xff)))
{
return Encoding.GetEncoding(12001); // big endian UTF-32.
}
else if (len >= 4 && ((bytes[0] == 0xff && bytes[1] == 0xfe && bytes[2] == 0x00 && bytes[3] == 0x00) || (bytes[0] == 0xff && bytes[1] == 0xfe && bytes[2] == 0xff && bytes[3] == 0xfe)))
{
return Encoding.UTF32; // skip UTF-32 little endian BOM
}
else if (len >= 2 && bytes[0] == 0xff && bytes[1] == 0xfe)
{
return Encoding.Unicode; // skip UTF-16 little endian BOM
}
else if (len >= 2 && bytes[0] == 0xf2 && bytes[1] == 0xff)
{
return Encoding.BigEndianUnicode; // skip UTF-16 big endian BOM
}
return null;
}