public static Encoding GetFileEncoding(string srcFile)
{
// *** Por defecto usar Ansi CodePage
Encoding enc = Encoding.Default;
byte[] buffer = new byte[5];
FileStream file = new FileStream(srcFile, FileMode.Open);
file.Read(buffer, 0, 5);
file.Close();
if (buffer[0] == 0xef && buffer[1] == 0xbb && buffer[2] == 0xbf)
enc = Encoding.UTF8;
else if (buffer[0] == 0xfe && buffer[1] == 0xff)
enc = Encoding.Unicode;
else if (buffer[0] == 0 && buffer[1] == 0 && buffer[2] == 0xfe && buffer[3] == 0xff)
enc = Encoding.UTF32;
else if (buffer[0] == 0x2b && buffer[1] == 0x2f && buffer[2] == 0x76)
enc = Encoding.UTF7;
return enc;
}
public static StreamReader OpenStreamReaderWithEncoding(string srcFile)
{
Encoding enc = GetFileEncoding(srcFile);
return new System.IO.StreamReader(srcFile, enc);
}
Fuente: http://www.west-wind.com/Weblog/posts/197245.aspx