System.IO.FileStream file=new FileStream("save.htm",System.IO.FileMode.Create,System.IO.FileAccess.Write,System.IO.FileShare.ReadWrite,255,false);
WebRequest myWebRequest = WebRequest.Create("http://www.21cn.com");
WebResponse myWebResponse = myWebRequest.GetResponse(); 
Stream ReceiveStream = myWebResponse.GetResponseStream();
Encoding encode = System.Text.Encoding.GetEncoding("utf-8");
StreamReader readStream = new StreamReader( ReceiveStream, encode );
Char[] read = new Char[256];
int count = readStream.Read( read, 0, 256 );
String str = new String(read, 0, count);
file.Write(System.Text.Encoding.UTF8.GetBytes(str),0,str.Length);
while (count > 0) 
{
str = new String(read, 0, count);
file.Write(System.Text.Encoding.UTF8.GetBytes(str),0,str.Length);
count = readStream.Read(read, 0, 256);
}
readStream.Close();
file.Close();
myWebResponse.Close();以上是我的代码,可是运行后发现:
1、save.htm 的文字间存在很多多余的正方形
2、很多文字变成了乱码请问我的代码应该怎样修改才能解决这两个问题?

解决方案 »

  1.   

    WebRequest request = WebRequest.Create(url);
    WebResponse response = request.GetResponse();
    Stream stream = response.GetResponseStream();
    StreamReader sr = new StreamReader(stream,Encoding.GetEncoding("gb2312"));
    string html = sr.ReadToEnd();
    sr.Close();
    stream.Close();
    换成gb2312试试
      

  2.   

    Encoding encode = System.Text.Encoding.GetEncoding("gb2312");
      

  3.   

    你读的时候必须要指定编码
    你可以这样做:
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://www.163.com");
             HttpWebResponse response = (HttpWebResponse)request.GetResponse();
             if (response.StatusCode == HttpStatusCode.OK)
             {
                 string type = response.ContentType;
                 //Label1.Text = type;
                 string[] words = type.Split('=');
                 if (words.Length > 1)
                 {
                     type = words[1];
                 }
                 else
                 {
                     type = "gb2312";
                 }
                 Stream st = response.GetResponseStream();
                 StreamReader sr = new StreamReader(st,System.Text.Encoding.GetEncoding(type));
                 html = sr.ReadToEnd();
                 //TextBox2.Text = s.ToString();
                 sr.Close();
                 sr.Dispose();
             }
      

  4.   

    Encoding encode = System.Text.Encoding.GetEncoding("gb2312");
      

  5.   

    谢谢各位
    可是现在问题是:我不用gb2312而用utf-8显示字符串的时候都是正常的,但写到文件就出问题了
    请问要怎样做才能使得写文件的时候不出现乱码和黑色正方形的问题?
      

  6.   

    WebRequest request = WebRequest.Create("http://www.21cn.com");
    WebResponse response = request.GetResponse();
    Stream stream = response.GetResponseStream();
    StreamReader sr = new StreamReader(stream,Encoding.GetEncoding("gb2312"));
    StreamWriter sw=new StreamWriter("save.htm",false,Encoding.GetEncoding("gb2312"));string source;
    while((source=sr.ReadLine())!=null)
    {
    sw.WriteLine(source);
    }sw.Close();
    sr.Close();
    stream.Close();像我这样,一行一行地读写,不要一个一个字节地读写
    用 StreamReader 和 StreamWriter ,不要用 Stream