2017-06-05 150 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對象。 –