0

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

/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's Encoding 属性设置为 UTF8 可以完成大部分工作,但是某些字符似乎仍然损坏,例如:双引号和 & 符号保持\u0026quot;\u0026amp;.

我不知道怎么把\u0026变成&,所以我可以改& 至 &。

4

2 回答 2

0

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

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

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)一次。这将使等号被编码,除了 as %3D,这是它们的正确编码值。

于 2017-06-05T19:17:21.380 回答
0

看起来神秘对我来说已经解决了,但是我再次偶然发现它,没有找到任何内置解决方案,因为如果字符是 html 转义字符的一部分,这些似乎无法解码 utf8。

然而,由于这些似乎只使用与号,我必须使用Replace(@"\u0026","&")才能HtmlDecode获得正确的字符串。

于 2017-06-26T19:30:26.537 回答