static Encoding DetectInternal(Byte[] data) { Encoding encoding = null; // 最笨的办法尝试 var encs = new Encoding[] { // 常用 Encoding.UTF8, // 用户界面选择语言编码 Encoding.GetEncoding(CultureInfo.CurrentUICulture.TextInfo.ANSICodePage), // 本地默认编码 Encoding.Default }; encs = encs.Where(s => s != null).GroupBy(s => s.CodePage).Select(s => s.First()).ToArray(); // 如果有单字节编码,优先第一个非单字节的编码 foreach (var enc in encs) { if (IsMatch(data, enc)) { if (!enc.IsSingleByte) return enc; if (encoding == null) encoding = enc; } } if (encoding != null) return encoding; // 探测Unicode编码 encoding = DetectUnicode(data); if (encoding != null) return encoding; // 简单方法探测ASCII encoding = DetectASCII(data); if (encoding != null) return encoding; return null; }