解码百分比编码的字符串c#.net

时间:2012-10-15 15:09:35

标签: c# .net

如何解码如下字符串:

NAME1 = ABC&安培;用户id = DEF&安培;名称2 = ZYX&安培;有效载荷=%3cSTAT +的xmlns%3axsi%3D%22http%3A%2F%2fwww.w3.org%2f2001%2fXMLSchema实例%22%3E%3cREQ。 ..

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

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

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

4 个答案:

答案 0 :(得分:18)

这应该适合你:

System.Uri.UnescapeDataString(str)

答案 1 :(得分:9)

您是否尝试过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是更好的选择。

答案 2 :(得分:3)

HttpServerUtility.UrlDecode就是你想要的。

答案 3 :(得分: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...

我希望这就是你想要的。