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ダウンロードの前に の Encoding プロパティを UTF8 に設定すると、ほとんどの作業が行われますが、一部の文字は依然として破損しているよう\u0026quot;に見えます\u0026amp;

\u0026 を & にする方法がわからないので、& を変更できます。に &。

4

2 に答える 2

0

That these strings are double (actually triple) encoded in this way is a sign that the string is not being encoded correctly. If you own the code that encodes these strings, consider solving this problem there, which is the root of the issue.

That said, here are the decoding calls you need to make to decode this. I do not recommend this solution, as it is definitely a workaround. Again, the problematic behavior is in the code doing the encoding.

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);

This will give you:

/browse_ajax?action_continuation=1&continuation=4qmFsgJAEhhVQ2ZXdHFQeUJNR183aTMzT2VlTnNaWncaJEVnWjJhV1JsYjNNZ0FEZ0JZQUZxQUhvQk03Z0JBQSUzRCUzRA==

If you really want to keep the %253D encoding of the equal signs, just call Uri.UnescapeData(string) once. This will leave the equal signs encoded, except as %3D, which is their proper encoded value.

于 2017-06-05T19:17:21.380 に答える