【问题标题】:decode percent-encoded string c# .net解码百分比编码的字符串 c# .net
【发布时间】:2012-10-15 15:09:34
【问题描述】:

如何解码如下字符串:

name1=ABC&userId=DEF&name2=zyx&payload=%3cSTAT+xmlns%3axsi%3d%22http%3a%2f%2fwww.w3.org%2f2001%2fXMLSchema-instance%22%3e%3cREQ...

背景:我接受 HTTP POST(基本上是名称值对),然后将字节数组转换为字符串:

Encoding.UTF8.GetString(response, 0, response.Length);

我尝试了 WebUtility 和 HttpUtility 的 HtmlDecode 方法,但似乎得到了相同的字符串。

【问题讨论】:

    标签: c# .net


    【解决方案1】:

    这应该可以为您完成工作:

    System.Uri.UnescapeDataString(str)
    

    【讨论】:

    • 谢谢大家。这两个答案都让我到达了我需要去的地方! Uri 方法与 HttpUtility 方法有什么特别的优缺点吗?
    • Uri 将允许您从您的引用中排除 System.Web,如果您不需要它。
    • @JohnSpiegel:是的,存在细微差别,请参阅我编辑的答案。
    【解决方案2】:

    你试过HttpUtility.UrlDecode吗?

    here

    请注意,此函数的作用与HttpUtility.HtmlDecode 不同。

    编辑:回答有关UrlDecodeUnescapeDataString 之间差异的问题:

    UnescapeDataString 上引用MSDN page

    许多 Web 浏览器将 URI 中的空格转义为加号(“+”)字符;但是,UnescapeDataString 方法不会将加号字符转换为空格,因为这种行为并不是所有 URI 方案的标准。

    UrlDecode 确实会处理这些问题,但如果您尝试以下操作,您会得到不同的响应:

    string a = Uri.UnescapeDataString(".Net+Framework"); //returns ".Net+Framework"
    string b = HttpUtility.UrlDecode(".Net+Framework"); //returns ".Net Framework"
    

    因此,为了获得更好的覆盖率,HttpUtility.UrlDecode 似乎是更好的选择。

    【讨论】:

      【解决方案3】:

      HttpServerUtility.UrlDecode 是你想要的。

      【讨论】:

        【解决方案4】:
        var result = System.Web.HttpUtility.UrlDecode("name1=ABC&userId=DEF&name2=zyx&payload=%3cSTAT+xmlns%3axsi%3d%22http%3a%2f%2fwww.w3.org%2f2001%2fXMLSchema-instance%22%3e%3cREQ...");
        

        给予

        name1=ABC&userId=DEF&name2=zyx&payload=<STAT xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><REQ...
        

        我希望这就是你想要的。

        【讨论】:

          猜你喜欢
          • 2011-03-26
          • 2016-01-13
          • 1970-01-01
          • 2021-10-10
          • 2023-03-23
          • 1970-01-01
          • 2014-12-31
          相关资源
          最近更新 更多