最近解析网页 发现网络返回解析 response.characterset iso-8859-1 gzip 解压 报错 自己记录下 . 不要采用 :
StreamReader reader = new StreamReader(response_stream, Encoding.GetEncoding("gb2312")); 解压gzip流会报错:System.ArgumentException:“流不可读。” 正确方法: HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream response_stream = response.GetResponseStream();
int count = (int)response.ContentLength;
int offset = 0;
byte[] buf = new byte[count];
while (count > 0) //读取返回数据
{
int n = response_stream.Read(buf, offset, count);
if (n == 0) break;
count -= n;
offset += n;
}
request_stream.Close();
response.Close();
System.IO.StringReader srr=DeCompress(buf);
string srcString1 = srr.ReadToEnd(); ///转压缩的Byte public System.IO.StringReader DeCompress(byte[] str)
{
System.IO.MemoryStream stream = new System.IO.MemoryStream();
stream.Write(str, 0, str.Length);
stream.Position = 0;
GZipStream zip = new GZipStream(stream, CompressionMode.Decompress);
System.IO.StreamReader rd = new System.IO.StreamReader(zip);
return new System.IO.StringReader(rd.ReadToEnd());
}