As found in: http://www.personalmicrocosms.com/Pages/dotnettips.aspx?c=15&t=17
public static Encoding GetFileEncoding(String FileName)
{
Encoding Result = null;
FileInfo FI = new FileInfo(FileName);
FileStream FS = null;
try
{
FS = FI.OpenRead();
Encoding[] UnicodeEncodings = { Encoding.BigEndianUnicode, Encoding.Unicode, Encoding.UTF8 };
for(int i = 0; Result == null && i < UnicodeEncodings.Length; i++)
{
FS.Position = 0;
byte[] Preamble = UnicodeEncodings[i].GetPreamble();
bool PreamblesAreEqual = true;
for(int j = 0; PreamblesAreEqual && j < Preamble.Length; j++)
{
PreamblesAreEqual = Preamble[j] == FS.ReadByte();
}
if(PreamblesAreEqual)
{
Result = UnicodeEncodings[i];
}
}
}
catch(System.IO.IOException)
{
}
finally
{
if(FS != null)
{
FS.Close();
}
}
if(Result == null)
{
Result = Encoding.Default;
}
return Result;
}
To use this:
Encoding encode = GetFileEncoding(@"C:\myFile.txt");
StreamReader re = new StreamReader(@"C:\myFile.txt", encode);
Enjoy :)