public class WebDownload : WebClient { private int _timeout; /// <summary> /// 超时时间(毫秒) /// </summary> public int Timeout { get { return _timeout; } set { _timeout = value; } } public WebDownload() { this._timeout = 60000; } public WebDownload(int timeout) { this._timeout = timeout; } protected override WebRequest GetWebRequest(Uri address) { var result = base.GetWebRequest(address); result.Timeout = this._timeout; return result; } public string Get(string url) { string html = ""; var data = this.DownloadData(url); var r_utf8 = new System.IO.StreamReader(new System.IO.MemoryStream(data), Encoding.UTF8); //将html放到utf8编码的StreamReader内 var r_gbk = new System.IO.StreamReader(new System.IO.MemoryStream(data), Encoding.Default); //将html放到gbk编码的StreamReader内 var t_utf8 = r_utf8.ReadToEnd(); //读出html内容 var t_gbk = r_gbk.ReadToEnd(); //读出html内容 if (!isLuan(t_utf8)) //判断utf8是否有乱码 { html = t_utf8; } else { html = t_gbk; } return html; } bool isLuan(string txt) { var bytes = Encoding.UTF8.GetBytes(txt); //239 191 189 for (var i = 0; i < bytes.Length; i++) { if (i < bytes.Length - 3) if (bytes[i] == 239 && bytes[i + 1] == 191 && bytes[i + 2] == 189) { return true; } } return false; } }