抓取网页中文乱码,求解

展涛 2012-07-30 05:19:28
我抓取的网页是:http://www.newegg.com.cn 网页的编码是gb2312.

我用的系统是英文系统,无论怎么改抓取的源代码都是乱码,中文系统是没问题。

下面是我写的Code:
WebResponse res = req.GetResponse();
Stream resStream = res.GetResponseStream();
StreamReader sr = new StreamReader(resStream, Encoding.UTF8); //试过用default,utf-8抓取的网页源代码都是乱码
string result= sr.ReadToEnd();
返回的result是乱码(英文系统)

我请教各位大虾的是在编程的时候怎样抓取网页代码是正常的。

不能用以下方法:在系统安装中文补丁。(代码适应系统,非系统适应代码)。

我曾找解码的方法,没试成功,可能方法有误。哪位大虾请帮帮忙。急急急!!
...全文
314 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
rayyu1989 2012-08-06
  • 打赏
  • 举报
回复


gb2312 你用utf8请求当然乱码了

试试 Encoding.GetEncoding("gbk")
csnd唐长老 2012-08-06
  • 打赏
  • 举报
回复
Uri requestUri = new Uri("http://www.newegg.com.cn);
csnd唐长老 2012-08-06
  • 打赏
  • 举报
回复
StreamReader reader = new StreamReader(WebRequest.Create(requestUri).GetResponse().GetResponseStream(), Encoding.Default);
失落的神庙 2012-08-06
  • 打赏
  • 举报
回复
StreamReader sr = new StreamReader(resStream, Encoding.GetEncoding("gb2312"));
这样?
  • 打赏
  • 举报
回复
最近做垂直搜索.
  • 打赏
  • 举报
回复
string content;
string url = "http://www.newegg.com.cn";
bool success = getWebContent(url, "post", "gbk", out content);
if (success)
{
Response.Write(content);
}
------------------------------------------
public static bool getWebContent(string strURL, string method, string encodingType, out string buf)
{
buf = "";
try
{
HttpWebRequest request = null;
request = (HttpWebRequest)WebRequest.Create(strURL);
request.Method = method; //请求方式
request.ContentType = "text/html"; //内容类型

string paraUrlCoded = System.Web.HttpUtility.UrlEncode(""); //参数经过URL编码
byte[] payload;
payload = System.Text.Encoding.GetEncoding(encodingType).GetBytes(paraUrlCoded); //将URL编码后的字符串转化为字节

request.ContentLength = payload.Length; //设置请求的ContentLength

Stream writer = request.GetRequestStream(); //获得请求流
writer.Write(payload, 0, payload.Length); //将请求参数写入流
writer.Close(); //关闭请求流

HttpWebResponse response;
response = (HttpWebResponse)request.GetResponse(); //获得响应流

Stream s;
s = response.GetResponseStream();

StreamReader objReader = new StreamReader(s, System.Text.Encoding.GetEncoding(encodingType));

string HTML = "";
string sLine = "";
int i = 0;

while (sLine != null)
{
i++;
sLine = objReader.ReadLine();
if (sLine != null)
{
HTML += sLine;
}
}
buf = HTML;
if (HTML == "")
{
return false;
}
else
{
return true;
}
}
catch (Exception e)
{
Console.WriteLine("页面读取异常:" + e.Message);
return false;
}
}


正常 已测试!
ycproc 2012-08-06
  • 打赏
  • 举报
回复


用default默认编码试试
蒋晟 2012-08-06
  • 打赏
  • 举报
回复
Encoding.UTF8这个不能随便乱写呀,要检测编码的。而且很多网站HTML里声明的编码和发送的编码不一致……这个只能靠词频了,IE有个IMultiLanguage的API,FireFox和Chrome的实现都可以自己去翻源代码
展涛 2012-07-30
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
你确认是UTF8
[/Quote]

我确认那个网站http://www.newegg.com.cn 的编码是 gb2312,可是我的系统是英文系统,只能支持utf8的格式才正确显示,抓取回来的源代码,中文都是乱码,这过程中该怎样转换?谢谢。
bdmh 2012-07-30
  • 打赏
  • 举报
回复
你确认是UTF8
SocketUpEx 2012-07-30
  • 打赏
  • 举报
回复
IE打开也是乱码吧

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧