14

如何解码如下字符串:

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 方法,但似乎得到了相同的字符串。

4

4 回答 4

30

这应该为您完成工作:

System.Uri.UnescapeDataString(str)
于 2012-10-15T15:13:13.250 回答
12

你试过HttpUtility.UrlDecode吗?

这里

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

编辑:回答关于和之间差异的UrlDecode问题UnescapeDataString

引用MSDN页面UnescapeDataString

许多 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 似乎是更好的选择。

于 2012-10-15T15:12:42.103 回答
3

HttpServerUtility.UrlDecode是你想要的。

于 2012-10-15T15:13:01.450 回答
2
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...

我希望这就是你想要的。

于 2012-10-15T15:14:38.350 回答