HttpWebResponse ResponseUri 跳转的URL中存在中文就乱码 20C

C# 代码

                          string MyLink =  “http://www.zei8.net/plus/download.php?open=2&id=55507&uhash=dc74d5c3ccbb8856f2e13515”;
                                                        HttpWebRequest “request = (HttpWebRequest)WebRequest.Create(MyLink);
                            rettpWebRequest)WebRequest.Create(MyLink);quest.Method = "GET";
                            request.Headers.Clear();
                            request.ContentType = "application/x-www-form-urlencoded";
                            request.KeepAlive = true;
                            request.AllowAutoRedirect = true;


                            HttpWebResponse httpResponse = (HttpWebResponse)request.GetResponse();

                            string mydownurl = httpResponse.ResponseUri.ToString();
                            httpResponse.Close();

服务器端的情况无法控制,我们无法更改服务器端代码。

MyLink 为原始的地址
形式为 http://www.*******.com/plus/download.php?open=2&id=55507&uhash=dc74d5c3ccbb8856f2e13515
我通过以上代码 获取mydownurl得到真实地址,但是当真实地址中存在中文的时候 获取的地址显示为乱码 是这样的地址

http:///www.*******.com/2015/201502/Äê14-20ÈÕ½ðÈÚ°²È«ÔËÐп¼ºËÇé¿öͨ±¨.rar

实际地址是

http:///www.*******.com/2015/201502/《原来康熙》全集.rar

找了个测试地址

http://www.zei8.net/plus/download.php?open=2&id=55507&uhash=dc74d5c3ccbb8856f2e13515

5个回答

设置一下编码格式:方法:
response:
A、设置服务器端的编码
response.setCharacterEncoding("utf-8”);
B、通知浏览器服务器发送的数据格式
response.setContentType("text/html;charset=utf-8”);
C、浏览器使用utf-8进行解码

request;
A、post方式
post方式属于表单提交,参数存在于请求体中。
request.setCharacterEncoding("utf-8”)
B
在tomcat的server.xml中,设置元素的属性URIEncoding="UTF-8”即可。(默认没有设置此属性)

rogergao
rogergao 回复ForHeartOnly: StreamReader 是读取页面内容的,我是要读取跳转后的URL,url中有中文。
4 年多之前 回复
rogergao
rogergao 回复ForHeartOnly: 我读的不是 stream 是url ,读取内容stream 没问题的,不是我想要的答案。
4 年多之前 回复
qq_33381918
ForHeartOnly 有时候编码的多次转换也会出问题,注意一下哦
4 年多之前 回复
qq_33381918
ForHeartOnly 加上try 调试
4 年多之前 回复
qq_33381918
ForHeartOnly Encoding encode = System.Text.Encoding.GetEncoding("utf-8"); StreamReader readStream = new StreamReader( receiveStream, encode ); string strResponse = readStream.ReadToEnd(); 试一下这个吧
4 年多之前 回复
qq_33381918
ForHeartOnly 回复rogergao: 自己多检查一下,问题要慢慢排查……
4 年多之前 回复
rogergao
rogergao 回复ForHeartOnly: HttpWebResponse 根本不包含 setCharacterEncoding setCharacterEncoding
4 年多之前 回复
rogergao
rogergao 你的回答解决不了问题。
4 年多之前 回复
qq_33381918
ForHeartOnly 回复rogergao:那就在service中控制吧!request.setCharacterEncoding("utf-8”),response.setCharacterEncoding("utf-8”
4 年多之前 回复
rogergao
rogergao 服务器接触不到,服务器端的配置无法更改。
4 年多之前 回复

用iso8859重新获取一次…然后把获取到的用utf8格式在编码一次

q4444tita
青春逝如流水 我是学Java的…c#的不会…你可以在网上搜下关键词……
4 年多之前 回复
rogergao
rogergao 能详细说下吗,代码怎么写。
4 年多之前 回复

可以发给我url链接吗,我试下

rogergao
rogergao ****部分,私信给你了
4 年多之前 回复
rogergao
rogergao http://www.*******.net/plus/download.php?open=2&id=55507&uhash=dc74d5c3ccbb8856f2e13515
4 年多之前 回复
rogergao
rogergao 怎么发给你,私信不允许发 连接
4 年多之前 回复

这样试试,获取响应头后的地址


        request.AllowAutoRedirect = false;//禁止跳转
        //request.AllowAutoRedirect = true;


        HttpWebResponse httpResponse = (HttpWebResponse)request.GetResponse();
        string mydownurl = httpResponse.GetResponseHeader("location");//
showbo
支付宝加好友偷能量挖 回复rogergao: 调试了下httpResponse.ResponseUri.PathAndQuery这个有搞,解码这个应该可以,原来2字节变为4字节,查看了下编码更换了%c2开头的保持后面的不便,%c3开头的后面的编码第一位+4就对应实际gb2312编码。。你可以往这方面解码
4 年多之前 回复
rogergao
rogergao 回复showbo: http://www.zei8.net/plus/download.php?open=2&id=5697&uhash=0b132c1e9925356111d21bd8
4 年多之前 回复
showbo
支付宝加好友偷能量挖 回复rogergao: 私信个连接来试试
4 年多之前 回复
rogergao
rogergao 这个早试过了,也乱码
4 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问