2017-06-05 188 views
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的编码属性设置为UTF8可以完成大部分工作,但某些字符看起来仍然损坏,例如:双引号和&符号保留\u0026quot;\u0026amp;

我不知道如何制作<&>,所以我可以改变& amp;到&。

+1

如果你找到了你的问题的答案,那么你应该把它作为*答案*而不是对问题的编辑。 – Servy

回答

0

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

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

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,这是他们正确的编码值。

+0

因为它不是一个Web应用程序[https://msdn.microsoft.com/de-de/library/7c5fyk1k(v=vs.110).aspx](MSDN)说要使用System.Net.WebUtility.HtmlDecode(字符串)'。而可悲的是它会导致'/ browse_ajax action_continuation = 1 \ u0026amp;延续= 4qmFsgJAEhhVQ2ZXdHFQeUJNR183aTMzT2VlTnNaWncaJEVnWjJhV1JsYjNNZ0FEZ0JZQUZxQUhvQk03Z0JBQSUzRCUzRA =%3' – Kartoffel

+0

可悲的是,我不负责修复该编码的,因为这是实际的YouTube代码。也许'新的System.Net.WebClient()。DownloadString(字符串)'奇怪的下载时编码的东西? – Kartoffel

+0

提供的URL通过三次编码通过。我无法分辨您是否做过或YouTube做过。您是否加载了YouTube提供给您的文字字符串作为URI?如果是这样,请发布处理接收YouTube响应消息的代码,提取URI并将URI加载为Uri对象。 –