get网页乱码问题

vbfaq 2008-07-27 02:35:01
第三方抓包工具解码压缩过的网页流后是乱码,有办法可以把乱码还原为网页流吗?然后再解压网页流、再用正确的编码解码网页流.
...全文
100 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xhan2000 2008-08-01
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wangfuchong 的回复:]
第三方抓包工具解码压缩过的网页流后是乱码,有办法可以把乱码还原为网页流吗?
这个不知道,直接就像楼上自己编写抓去不就得了?httpWebRequest自动识别解压缩的


然后再解压网页流、再用正确的编码解码网页流.
这个参考:
tempMem.Position = 0;
GZipStream zipStream = new GZipStream(tempMem, CompressionMode.Decompress);
using (StreamReader responeRead…
[/Quote]

抓数据考虑utf-8编码
怫悰 2008-07-31
  • 打赏
  • 举报
回复
请问您已经有直接复制第三方抓包软件抓的数据(即使乱码)自己写的软件了么?怎么实现的?
vbfaq 2008-07-29
  • 打赏
  • 举报
回复
谢谢大家,我知道怎么正确解码网页流和解压缩网页流.
我现在不是说自已用软件抓取的网页流会出现乱码,怎么正确解码网页流也知道,现在问题是第三方抓包工具解码后的网页流是乱码,为了便于分析服务器返回的是什么数据,所以想做一个能够直接复制第三方抓包工具解码错的乱码到软件里,然后根据这些乱码还原为网页流,然后再解压网页流、再用正确的编码解码网页流,这样方便些,不用再用软件模拟提交数据.
怫悰 2008-07-27
  • 打赏
  • 举报
回复
第三方抓包工具解码压缩过的网页流后是乱码,有办法可以把乱码还原为网页流吗?
这个不知道,直接就像楼上自己编写抓去不就得了?httpWebRequest自动识别解压缩的


然后再解压网页流、再用正确的编码解码网页流.
这个参考:
tempMem.Position = 0;
GZipStream zipStream = new GZipStream(tempMem, CompressionMode.Decompress);
using (StreamReader responeReader = new StreamReader(zipStream, Encoding.ASCII))
{
strResponse += responeReader.ReadToEnd();
}
//writer.Write(strResponse);
tempMem.Close();
zipStream.Close();
bindsang 2008-07-27
  • 打赏
  • 举报
回复

string encodingName, charset;
string Meta_Content_Encoding = @"<meta\s+http-equiv\s*=\s*[\""'\s]?Content-Type\b.*?charset\s*=\s*(?<encodingName>[^\""'\s>]*)";
RegexOptions options = RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.ExplicitCapture;
Regex CharsetRegex = new Regex(Meta_Content_Encoding, options);

HttpWebResponse response = webReq.GetResponse() as HttpWebResponse;
encodingName = response.ContentEncoding;
charset = response.CharacterSet;

byte[] htmlData = null;
using (BinaryReader br = new BinaryReader(response.GetResponseStream()))
{
int bufferLen = 4096;
byte[] buffer = new byte[bufferLen];
MemoryStream ms = new MemoryStream();
int count = buffer.Length;
while ((count = br.Read(buffer, 0, bufferLen)) > 0)
{
ms.Write(buffer, 0, count);
}

htmlData = ms.ToArray();
}
// 先测试html文档中有没有encoding
string testHtml = Encoding.ASCII.GetString(htmlData);
Match m = CharsetRegex.Match(testHtml);

if (m.Success) // 文档中存在标有encoding的Meta信息
{
encodingName = m.Groups["encodingName"].Value;
try
{
encode = Encoding.GetEncoding(encodingName);
}
catch { }
}

//文档中不存在标有encoding的Meta信息的时候,应用HTTP头的ContentEncoding信息
if (encode == null)
{
try
{
encode = Encoding.GetEncoding(encodingName);
}
catch { }
}

//文档中不存在标有encoding的Meta信息的时候,也不存在HTTP头的ContentEncoding信息
if (encode == null)
{
try
{
encode = Encoding.GetEncoding(charset);
}
catch { }
}

// 如果找不到相应的Encoding,则使用Default
if (encode == null) encode = Encoding.Default;

htmlString = encode.GetString(htmlData);
hongqi162 2008-07-27
  • 打赏
  • 举报
回复

用下面这个函数设置一下编码应该就可以了

public static string GetResponseText(string url)
{
string responseFromServer = null;
Stream dataStream = null;
StreamReader reader = null;
try
{
WebRequest request = WebRequest.Create(url);
request.Credentials = CredentialCache.DefaultCredentials;
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
if (response.StatusDescription == "OK")
{
try
{
dataStream = response.GetResponseStream();
reader = new StreamReader(dataStream, Encoding.GetEncoding("GB2312"));//在这里设置编码格式
responseFromServer = reader.ReadToEnd();
}
finally
{
reader.Close();
dataStream.Close();
}
}
response.Close();
return responseFromServer;
}
catch (Exception ex)
{
return null;
}
}

16,717

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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