请教使用WebRequest和WebResponse处理中文出现乱码的问题

amartapple 2010-10-02 04:58:58
我在程序中发送一个关键词到baidu搜索,返回数据生成一个html文档,可是把返回的数据写入html后再用浏览器打开全是乱码,但是直接在程序中用webBrowser打开这个链接却是正常的,请教如何才能生成正常的html文件。多谢!

//调用百度搜索
string input = HttpUtility.UrlEncode("关键词", Encoding.GetEncoding("gb2312"));
string sUrl = "http://www.baidu.com/s?bs=" + input + "&f=8&wd=intitle%3A" + input + "+filetype%3Adoc";
WebRequest wrq = WebRequest.Create(sUrl);

//把返回结果写入文件html.html,再用浏览器打开全是乱码
WebResponse wrs = wrq.GetResponse();
Stream strm = wrs.GetResponseStream();
StreamReader sr = new StreamReader(strm);
string line;
while ((line = sr.ReadLine()) != null)
{
StreamWriter swSaveFileList = File.AppendText("html.html");
swSaveFileList.WriteLine(line);
swSaveFileList.Flush();
swSaveFileList.Close();
}

//直接用webBrowser控件打开sUrl链接是正常的
webBrowser1.Navigate(sUrl);
...全文
530 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
wuyq11 2010-10-02
  • 打赏
  • 举报
回复
参数System.Text.Encoding.Default.GetBytes
服务器传回的流是否使用了gzip方法压缩:
System.IO.StreamReader r = new System.IO.StreamReader(new GZipStream(res.GetResponseStream(), CompressionMode.Decompress),encode);

amartapple 2010-10-02
  • 打赏
  • 举报
回复
经测试
StreamReader myStreamReader = new StreamReader(myResponseStream);
是一种乱码
StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("gb2312"));
结果和
StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.Default);
效果一样,是另外一种乱码。
wuyq11 2010-10-02
  • 打赏
  • 举报
回复
Stream myResponseStream = myHttpWebResponse.GetResponseStream();
StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("gb2312"));
outdata = myStreamReader.ReadToEnd();
amartapple 2010-10-02
  • 打赏
  • 举报
回复
生成的sUrl没有问题,现在是返回的数据是乱码
wuyq11 2010-10-02
  • 打赏
  • 举报
回复
string param = "";
byte[] bs = Encoding.ASCII.GetBytes(param);
HttpWebRequest req = (HttpWebRequest) HttpWebRequest.Create( "" ); req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
req.ContentLength = bs.Length;
using (Stream reqStream = req.GetRequestStream())
{}
中文
Encoding myEncoding = Encoding.GetEncoding("gb2312");
string param = HttpUtility.UrlEncode("", myEncoding);
byte[] postBytes = Encoding.ASCII.GetBytes(param);

110,534

社区成员

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

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

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