public static string GuessEncoding(byte[] data)
{
Encoding encoding;
return GuessEncoding(data, out encoding);
}
public static string GuessEncoding(byte[] data, out Encoding encoding)
{
foreach (var e in new Encoding[] { Encoding.UTF8, Encoding.Unicode, Encoding.BigEndianUnicode })
{
encoding = e;
var pre = encoding.GetPreamble();
if (Enumerable.SequenceEqual(data.Take(pre.Length), pre))
return encoding.GetString(data, pre.Length, data.Length - pre.Length);
}
foreach (var e in new Encoding[] { new UTF8Encoding(false), Encoding.Default })
{
encoding = e;
var str = encoding.GetString(data);
if (Enumerable.SequenceEqual(encoding.GetBytes(str), data))
return str;
}
throw new NotSupportedException();
}
评论