与我在浏览器中查看页面源时相比,为什么 WebClient 或 HttpWebResponce/Request 具有不同的编码?另外,如果他们找不到正确的编码,他们会向我展示奇怪的符号。例如:当我尝试下载 - http://www.li.ru - 在页面源中它是 utf-8,从 WebClient 或 HttpWebResponce/Request 它是 windows-1251。
任何帮助,将不胜感激。
与我在浏览器中查看页面源时相比,为什么 WebClient 或 HttpWebResponce/Request 具有不同的编码?另外,如果他们找不到正确的编码,他们会向我展示奇怪的符号。例如:当我尝试下载 - http://www.li.ru - 在页面源中它是 utf-8,从 WebClient 或 HttpWebResponce/Request 它是 windows-1251。
任何帮助,将不胜感激。
您只需要在您请求的网页上强制编码相同即可。
使用 WebClient,您可以执行以下操作:
using(WebClient webClient = new WebClient())
{
webClient.Encoding = Encoding.UTF8;
string s = webClient.DownloadString("http://wwww.li.ru");
}
使用 HttpWebResponse/Request:
HttpWebRequest webRequest = HttpWebRequest.CreateHttp("http://www.li.ru");
using (HttpWebResponse response = (HttpWebResponse)webRequest.GetResponse())
{
using (Stream resStream = response.GetResponseStream())
{
StreamReader reader = new StreamReader(resStream, Encoding.UTF8);
return reader.ReadToEnd();
}
}
编辑:
只需将固定编码扩展为以下代码:
var enc = Encoding.Default;
if (!string.IsNullOrEmpty(response.CharacterSet))
{
var charSet = response.CharacterSet;
if (charSet == "ISO-8859-1")
charSet = "windows-1251";
enc = Encoding.GetEncoding(charSet);
}
StreamReader reader = new StreamReader(resStream, enc);
return reader.ReadToEnd();
如需进一步解释,您可以查看此页面:http: //blogs.msdn.com/b/feroze_daud/archive/2004/03/30/104440.aspx