[英]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
的Encoding屬性設置為UTF8可以完成大部分工作,但是某些字符似乎仍然損壞,例如:雙引號和&保持“ \"
和\&
。
我不知道如何將\\ u設為&,因此我可以更改& 至 &。
這些字符串以這種方式進行了兩次(實際上是三次)編碼,這表明該字符串未正確編碼。 如果您擁有編碼這些字符串的代碼,請考慮在那里解決此問題,這是問題的根源。
就是說,這是您需要對其進行解碼的解碼調用。 我不推薦這種解決方案,因為它絕對是一種解決方法。 同樣,有問題的行為在於代碼進行編碼。
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
的%253D
編碼,則只需調用Uri.UnescapeData(string)
一次。 這將使等號被編碼,但%3D
除外,這是它們的正確編碼值。
看起來像是奧秘解決了我的問題,但是我又偶然發現了它,沒有找到任何內置解決方案,因為如果該字符是html轉義字符的一部分,則這些解碼器似乎無法解碼utf8。
但是,由於這些似乎只使用&號,因此我必須使用Replace(@"\&","&")
才能進行HtmlDecode
並獲取正確的字符串。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.