如果网页是使用得gb2313编码方式,那么,无论是使用WebRequest类,还是HttpWebRequest类,还是采用WebClient都避免不了对获取的“字符串”内容进行再编码。

基本的方式是按byte读取,网页信息。再设置当前编码方式为“gb2312”,再通过Encoding类对byte数组进行组装。核心的代码是

int bytes = objStream.Read(read, 0, 512);
while(..){
System.Text.Encoding encode = System.Text.Encoding.GetEncoding("gb2312");
Console.Write(encode.GetString(read, 0, bytes));
}

采用HttpWebRequest逐一读取字节的代码案例

static void Main(string[] args)
{
//
// TODO: 在此处添加代码以启动应用程序
//

string sURL;
sURL = "http://www.maketop.net";

HttpWebRequest wrGETURL;
wrGETURL = (HttpWebRequest)WebRequest.Create(sURL);
wrGETURL.UserAgent = "test robot";

Stream objStream;
objStream = wrGETURL.GetResponse().GetResponseStream();

Byte[] read = new Byte[512];
int bytes = objStream.Read(read, 0, 512);

while(bytes > 0)
{
System.Text.Encoding encode = System.Text.Encoding.GetEncoding("gb2312");
Console.Write(encode.GetString(read, 0, bytes));

bytes = objStream.Read(read, 0, 512);
}

Console.ReadLine();
}

采用WebClient更简便的方法

static void Main(string[] args)
{
//
// TODO: 在此处添加代码以启动应用程序
//
WebClient wc = new WebClient();
byte[] response = wc.DownloadData("http://www.maketop.net");
System.Text.Encoding encoding = System.Text.Encoding.GetEncoding("gb2312");
Console.WriteLine(encoding.GetString(response));
Console.ReadLine();
}