in src/Microsoft.VisualStudio.SlowCheetah/Transformer/TransformUtilities.cs [40:83]
public static Encoding GetEncoding(Stream stream)
{
if (stream == null)
{
throw new ArgumentNullException(nameof(stream));
}
// Read the BOM
var bom = new byte[4];
stream.Read(bom, 0, 4);
// Analyze the BOM
if (bom[0] == 0x2b && bom[1] == 0x2f && bom[2] == 0x76)
{
return Encoding.UTF7;
}
if (bom[0] == 0xef && bom[1] == 0xbb && bom[2] == 0xbf)
{
return Encoding.UTF8;
}
if (bom[0] == 0xff && bom[1] == 0xfe)
{
return Encoding.Unicode; // UTF-16LE
}
if (bom[0] == 0xfe && bom[1] == 0xff)
{
return Encoding.BigEndianUnicode; // UTF-16BE
}
if (bom[0] == 0 && bom[1] == 0 && bom[2] == 0xfe && bom[3] == 0xff)
{
return Encoding.UTF32;
}
using (StreamReader reader = new StreamReader(stream, true))
{
stream.Position = 0;
reader.Peek();
return reader.CurrentEncoding;
}
}