我通过以下代码////获取附件链接下载开始
                                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(MyLink);
                                request.Method = "GET";
                                request.Headers.Clear();
                                request.Headers[HttpRequestHeader.Cookie] = webBrowser1.Document.Cookie;
                                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();
                                               ///获取附件链接下载结束
在有中文地址的时候 抛出异常 然后获得地址,但是地址中的中文被重新编码了,使用ie直接点击链接 可以下载到文件,但是一旦使用用编码后的地址在ie中打开的话则提示404,包括在winform中 下载的时候也是出异常 提示404,
例如正确的地址应该是http://www.*****.com:8080/myjsp/myfile/201205/2012052219344490750/2012年14-20日金融安全运行考核情况通报.doc
但是获得的地址则为http://www.*******.com:8080/myjsp/myfile/201205/2012052219344490750/2012%C3%84%C3%AA14-20%C3%88%C3%95%C2%BD%C3%B0%C3%88%C3%9A%C2%B0%C2%B2%C3%88%C2%AB%C3%94%C3%8B%C3%90%C3%90%C2%BF%C2%BC%C2%BA%C3%8B%C3%87%C3%A9%C2%BF%C3%B6%C3%8D%C2%A8%C2%B1%C2%A8.doc我尝试使用 HttpUtility.UrlDecode(mystring, System.Text.Encoding.GetEncoding("gb2312"));解码 也得不到正确的地址,求指点,在线等!

解决方案 »

  1.   

    LocalPath = "/myjsp/myfile/201205/2012052219344490750/2012?ê14-20è??eèú°2è???DD??o??é??í¨±¨.doc"
    OriginalString = "http://www.3eport.com:8080/myjsp/myfile/201205/2012052219344490750/2012?ê14-20è??eèú°2è???DD??o??é??í¨±¨.doc"
    我在测试断点的时候 发现response的address项中 以上两项显示如上内容,
    在httpwatch抓包的收 发现流信息中的内容如下
    但是将get到的文件名拷贝粘贴到文本中时 则显示为正常的如下 GET /myjsp/myfile/201205/2012052219344490750/2012年14-20日金融安全运行考核情况通报.doc 
    求指点
      

  2.   

    URL转码
    System.Web.HttpUtility.UrlDecode(mydownurl)
      

  3.   

    刚才我按照你的说的转码了 http://www.3eport.com:8080/myjsp/myfile/201205/2012052219344490750/2012%C3%84%C3%AA14-20%C3%88%C3%95%C2%BD%C3%B0%C3%88%C3%9A%C2%B0%C2%B2%C3%88%C2%AB%C3%94%C3%8B%C3%90%C3%90%C2%BF%C2%BC%C2%BA%C3%8B%C3%87%C3%A9%C2%BF%C3%B6%C3%8D%C2%A8%C2%B1%C2%A8.doc 转码后发现结果为 http://www.3eport.com:8080/myjsp/myfile/201205/2012052219344490750/2012Äê14-20ÈÕ½ðÈÚ°²È«ÔËÐп¼ºËÇé¿öͨ±¨.doc是不是我获取的方法不对??还是 请指点
      

  4.   


    呃,我没注意看,sorry。
    建议你从“年”这个字着手,看看哪些编码组合出来的结果是%C3%84%C3%AA。好像单汉字编码出来的是4个字符的还真没见过,是不是编了两次。
      

  5.   


    我没注意看,sorry。
    建议你从“年”这个字着手,看看哪些编码组合出来的结果是“%C3%84%C3%AA”,好像一个汉字编码之后成4个字符的还真没见过,看看是不是编了两次码。
      

  6.   

    我刚才又作了断点 然后按照你说的做了编码 好像是 address所有获得的之中LocalPath = "/myjsp/myfile/201205/2012052219344490750/2012Äê14-20ÈÕ½ðÈÚ°²È«ÔËÐп¼ºËÇé¿öͨ±¨.doc"是这样的值 然后其他的地址项编码的都是这个地址 是不是我取的方法不对 或者……  具体断点内容如下
    谢谢 请多指点
      

  7.   

    补充: 刚才有我做了断点测试 应该是LocalPath = "/myjsp/myfile/201205/2012052219344490750/2012Äê14-20ÈÕ½ðÈÚ°²È«ÔËÐп¼ºËÇé¿öͨ±¨.doc"和OriginalString = "http://www.*&***.com:8080/myjsp/myfile/201205/2012052219344490750/2012Äê14-20ÈÕ½ðÈÚ°²È«ÔËÐп¼ºËÇé¿öͨ±¨.doc" 本身获得的就是乱码 然后其他的AbsolutePath 、AbsoluteUri 等得到的都是 localpath指的url编码值。如图 7楼图请指点 如何我才能获得正确的值
      

  8.   

    我的意思是让你试试看“年”字是怎么编码编成“%C3%84%C3%AA”的。
    我帮你试了一下,应该是先用UrlEncode(gb2312)【%C4%EA】;再用js的unescape【Äê】,再用UrlEncode(utf-8)【%C3%84%C3%AA】。
    所以,把这个过程逆过来,就能解码:
    string realdownurl = System.Web.HttpUtility.UrlDecode(
        Microsoft.JScript.GlobalObject.escape(
            System.Web.HttpUtility.UrlDecode(mydownurl,System.Text.Encoding.GetEncoding("utf-8"))
        ),System.Text.Encoding.GetEncoding("gb2312"));
    注意添加Microsoft.JScript的引用。另外我觉得这个只是从表象出发找的办法,根本上你们对url的编码是不是有什么地方做得不好。