如何对此进行解码以获得以下结果?
/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;
我不知道怎么做&amp ;,所以我可以改变&放大器;到&。
答案 0 :(得分: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)
一次即可。这将保留编码的等号,除了%3D
,这是它们正确的编码值。
答案 1 :(得分:0)
看起来这个神秘的东西已经解决了,但是我再次偶然发现它,没有找到任何解决方案,因为如果角色是html转义字符的一部分,这些似乎无法解码utf8。
因为这些似乎只使用&符号,我必须使用HtmlDecode
才能{{1}}并获得正确的字符串。