关于理论资料可查看:
public
static Encoding GetFileEncoding(
string filePath)
{
Encoding encoding = null;
FileStream fStream = File.Open(filePath, FileMode.Open);
if (fStream.CanSeek)
{
byte[] data = new byte[4];
fStream.Read(data, 0, 4);
int markerLength = 0;
switch (data[0])
{
case 0xef: // UTF8
markerLength = 3;
if (data.Length < 3)
break;
if (data[1] == 0xbb && data[2] == 0xbf)
encoding = Encoding.UTF8;
break;
case 0xfe: // UTF 16 BE
markerLength = 2;
if (data[1] == 0xff)
encoding = Encoding.BigEndianUnicode;
break;
case 0xff: // UTF 16 LE
markerLength = 2;
if (data[1] == 0xfe)
encoding = Encoding.Unicode;
break;
default:
encoding = Encoding.ASCII;
break;
}
}
fStream.Dispose();
fStream.Close();
fStream = null;
return encoding;
}
{
Encoding encoding = null;
FileStream fStream = File.Open(filePath, FileMode.Open);
if (fStream.CanSeek)
{
byte[] data = new byte[4];
fStream.Read(data, 0, 4);
int markerLength = 0;
switch (data[0])
{
case 0xef: // UTF8
markerLength = 3;
if (data.Length < 3)
break;
if (data[1] == 0xbb && data[2] == 0xbf)
encoding = Encoding.UTF8;
break;
case 0xfe: // UTF 16 BE
markerLength = 2;
if (data[1] == 0xff)
encoding = Encoding.BigEndianUnicode;
break;
case 0xff: // UTF 16 LE
markerLength = 2;
if (data[1] == 0xfe)
encoding = Encoding.Unicode;
break;
default:
encoding = Encoding.ASCII;
break;
}
}
fStream.Dispose();
fStream.Close();
fStream = null;
return encoding;
}
转载于:https://blog.51cto.com/lockrock/827084