HttpWebRequest页面请求时编码问题

jxhguojun 2006-09-07 07:15:18
//System.Net.HttpWebRequest request = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create("http://www.artron.net/index/artronexp_personal.php?artistid=%b4%de%c8%e7%d7%c1&exptype=&zs=");
System.String u = "http://www.artron.net/index/auctionpic.php?artist=崔如琢&exptype=";
u = System.Uri.EscapeUriString(u);
System.Net.HttpWebRequest request = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(u);

System.Net.HttpWebResponse response = (System.Net.HttpWebResponse)request.GetResponse();
System.IO.Stream stream = response.GetResponseStream();
System.IO.StreamReader reader = new System.IO.StreamReader(stream, System.Text.Encoding.GetEncoding("gb2312"));
System.String s = reader.ReadToEnd();
stream.Close();
response.Close();
Console.Write(s);

2种方法我都试过,结果不对,服务器上得到的querystring 是乱码
如何对对发送的请求编码?谢谢
服务器的charset是gb2312
上面的uri真实存在,大家不妨试试
...全文
1484 52 打赏 收藏 转发到动态 举报
写回复
用AI写文章
52 条回复
切换为时间正序
请发表友善的回复…
发表回复
goodluckalong 2007-04-05
  • 打赏
  • 举报
回复
你这个问题解决了吗?
jxhguojun 2006-09-11
  • 打赏
  • 举报
回复
jxhguojun 2006-09-10
  • 打赏
  • 举报
回复
如果是ASP.NET要统一编码那还不简单
jxhguojun 2006-09-10
  • 打赏
  • 举报
回复
问题在于不能统一,MS提供的类里面全部默认用UTF-8,改都不能改
jxhguojun 2006-09-09
  • 打赏
  • 举报
回复
请你分别请求这2个页面保存到html文件,用IE仔细看一遍
Seraph_98 2006-09-09
  • 打赏
  • 举报
回复
那只是改成用http://www.artron.net/index/artronexp_personal.php实例化

同样可以获取到上面的那段HTML代码……
jxhguojun 2006-09-09
  • 打赏
  • 举报
回复
从服务器上拿下来的数据肯定是没有问题,关键是请求的数据
jxhguojun 2006-09-09
  • 打赏
  • 举报
回复
http://www.artron.net/index/auctionpic.php
页面是从
http://www.artron.net/index/artronexp_personal.php
跳转过来的

我想解决的问题是
页面跳转时的编码错误问题
如果不发生跳转是没有问题的
Seraph_98 2006-09-09
  • 打赏
  • 举报
回复
那你试试用“http://www.artron.net/index/auctionpic.php”实例化HTTPWEBREQUEST

然后把POST的参数传到RequestStream里面

我现在是可以获取的HTML代码里面有下面的一段
<td class="a1418" align="center"><b>崔如琢</b></td>
</tr>
</table>
</td>
</tr>
<tr>
<td align="center">
<img src="pic/stat.php?artist=崔如琢&y=2005&tpcd=国画家"><br>
<br><br>
<table width="430" border="0" cellspacing="0" cellpadding="0">
<tr>
<td align="right">
国画指数:<a href=auctionpic.php?artist=崔如琢&y=2000&tpcd=国画家>[2000-2001]</a> <a href=auctionpic.php?artist=崔如琢&y=2002&tpcd=国画家>[2002-2003]</a> <a href=auctionpic.php?artist=崔如琢&y=2004&tpcd=国画家>[2004-2005]</a> <a href=auctionpic.php?artist=崔如琢&y=2006&tpcd=国画家>[2006-2007]</a> <a href=auctionpic.php?artist=崔如琢&y=1&tpcd=国画家>[全图]</a><br> </td>

这样应该是OK了吧?
jxhguojun 2006-09-09
  • 打赏
  • 举报
回复
我用AllowAutoRedirect = true的时候,最后得到的Content-Location
我用GB2312 Decode得到的是乱码,我用UTF-8 Decode后得到正确的结果
jxhguojun 2006-09-09
  • 打赏
  • 举报
回复
呵呵,楼上没理解我的意图,其实上面这一不很早我就做过了
问题不是出在这里,
在我第一次发出请求以后,页面有个重定向
而我的request AllowAutoRedirect == true;
所以它拿了服务器返回的Location(QueryString中有中文)再次发出了请求
但是这次用的是默认的UTF-8,所以服务器用GB2312 Decode以后得到的乱码
这是一个查询页面
最后返回的页面就是
对不起,没有找到"xxx",这里显示给我的是乱码(编码问题)
,后来我把AllowAutoRedirect设为False,
我自己用Location发请求
但是response["Location"]拿出来的却是乱码,我不能得到Byte[]类型的Location,QueryString里带中文的缘故吧,所以我不能再次发出请求,本来我想把Location转一次的,结果还是不行
Seraph_98 2006-09-09
  • 打赏
  • 举报
回复
OK了

模拟POST的参数要这样写

System.Web.HttpUtility.UrlEncode(key,requestEncoding)
+ "="
+ System.Web.HttpUtility.UrlEncode(value,requestEncoding)




因为System.Web.HttpUtility.UrlEncode()会把等号也转换掉的=V=

另外,我的requestEncoding用的是GBK
jxhguojun 2006-09-09
  • 打赏
  • 举报
回复
再顶起来,高手快来
pansha 2006-09-09
  • 打赏
  • 举报
回复
昨天我刚听了 微软的WEBCAST

http://www.microsoft.com/china/msdn/events/webcasts/shared/webcast/episode.aspx?newsID=1242601
ASP.NET中的编码

不同编码的页面、脚本之间互相引用,就会产生乱码的问题,解决方法就是统一成一种编码。在ASP.NET中如何处理编码问题?这堂讲座,我将和大家一起探讨这个问题。



Quick Info
讲师: 邵志东
讲课时间: 2006年8月4日 10:00-11:30
产品: Visual Studio
技术: ASP.NET
技术等级: 200
newr2006 2006-09-08
  • 打赏
  • 举报
回复
顶一下
jxhguojun 2006-09-08
  • 打赏
  • 举报
回复
现已发现问题所在
下面这是原来的url
http://www.artron.net/index/artronexp_personal.php?artistid=崔如琢&exptype=&zs=
我把AllowAutoRedirect改成false以后
发现
Location == "/index/auctionpic.php?artist=´ÞÈç×Á&exptype="
而没有改的话
自动给我重定向到"/index/auctionpic.php?artist=´ÞÈç×Á&exptype="
关键问题是MS自动用UTF-8给我编码的
但站点是GB2312,就得到了乱码
现在还有一个问题
我得到Location = "/index/auctionpic.php?artist=´ÞÈç×Á&exptype="
以后却不能再次request,因为乱码
本来想把原来的query改上去,但这不是解决的办法
各位有没有什么好办法帮我解决一下
jxhguojun 2006-09-08
  • 打赏
  • 举报
回复
顶一下
jxhguojun 2006-09-08
  • 打赏
  • 举报
回复
返回的Uri的QueryString里面应该是中文,我得到的是乱码,惨
ILoveSee 2006-09-08
  • 打赏
  • 举报
回复
System.Text.Encoding不能把ASCII的转回GB2312
jxhguojun 2006-09-08
  • 打赏
  • 举报
回复
加载更多回复(31)

110,571

社区成员

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

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

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