解码多个编码字符串

Decoding multiple encoded string

我如何对其进行解码以获得以下结果?

/browse_ajax?action_continuation=1\u0026amp;continuation=4qmFsgJAEhhVQ2ZXdHFQeUJNR183aTMzT2VlTnNaWncaJEVnWjJhV1JsYjNNZ0FEZ0JZQUZxQUhvQk03Z0JBQSUzRCUzRA%253D%253D

/browse_ajax?action_continuation=1&continuation=4qmFsgJAEhhVQ2ZXdHFQeUJNR183aTMzT2VlTnNaWncaJEVnWjJhV1JsYjNNZ0FEZ0JZQUZxQUhvQk03Z0JBQSUzRCUzRA%253D%253D

我试过这些,也多次使用它们,因为我读过的字符串可能被编码了多次。

System.Text.RegularExpressions.Regex.Unescape(string)
System.Uri.UnescapeDataString(string)
System.Net.WebUtility.UrlDecode(string)

这里哪个函数是正确的,或者更确切地说,我需要以什么顺序调用它们才能获得该结果。由于字符串不同,集合中可能还有其他特殊字符,因此自行编辑的变通办法有点太冒险了。

必须对字符串进行解码才能使用 new System.Net.WebClient().DownloadString(string)

编辑: 所以我发现上面的说法是错误的,我不需要解码就可以使用 WebClient.DownloadString(string).然而,下载的字符串也有类似的编码。在下载之前将 WebClient 的编码 属性 设置为 UTF8 可以完成大部分工作,但是有些字符似乎仍然损坏,例如:双引号和符号保留 \u0026quot;\u0026amp;.

我不知道怎么把\u0026变成&,所以我可以把&到 &.

这些字符串以这种方式进行双重(实际上是三重)编码表明该字符串没有被正确编码。如果您拥有对这些字符串进行编码的代码,请考虑在那里解决这个问题,这就是问题的根源。

就是说,这里是您需要进行解码的解码调用。我不推荐此解决方案,因为它绝对是一种解决方法。同样,有问题的行为出现在执行编码的代码中。

string val = "/browse_ajax?action_continuation=1\u0026amp;continuation=4qmFsgJAEhhVQ2ZXdHFQeUJNR183aTMzT2VlTnNaWncaJEVnWjJhV1JsYjNNZ0FEZ0JZQUZxQUhvQk03Z0JBQSUzRCUzRA%253D%253D";
val = System.Uri.UnescapeDataString(val);
val = System.Uri.UnescapeDataString(val);
val = System.Web.HttpUtility.HtmlDecode(val);

这会给你:

/browse_ajax?action_continuation=1&continuation=4qmFsgJAEhhVQ2ZXdHFQeUJNR183aTMzT2VlTnNaWncaJEVnWjJhV1JsYjNNZ0FEZ0JZQUZxQUhvQk03Z0JBQSUzRCUzRA==

如果你真的想保留等号的%253D编码,只需要调用一次Uri.UnescapeData(string)。这将使等号编码,除了 %3D,这是它们正确的编码值。

看起来这个谜对我来说已经解决了,但是我又偶然发现了它,没有找到任何内置解决方案,因为如果字符是 html-escaped 的一部分,这些似乎无法解码 utf8字符.

因为这些似乎只使用符号,所以我不得不使用 Replace(@"\u0026","&") 才能 HtmlDecode 并获得正确的字符串。