14

次のような文字列をデコードするにはどうすればよいですか。

name1 = ABC&userId = DEF&name2 = zyx&payload =%3cSTAT + xmlns%3axsi%3d%22http%3a%2f%2fwww.w3.org%2f2001%2fXMLSchema-instance%22%3e%3cREQ .. ..

背景:HTTP POST(基本的には名前と値のペア)を受け入れてから、バイト配列を次のように文字列に変換しています。

Encoding.UTF8.GetString(response, 0, response.Length);

WebUtilityとHttpUtilityのHtmlDecodeメソッドを試しましたが、同じ文字列が返されるようです。

4

4 に答える 4

30

これはあなたのために仕事をするはずです:

System.Uri.UnescapeDataString(str)
于 2012-10-15T15:13:13.250 に答える
12

試しましたHttpUtility.UrlDecodeか?

ここを参照してください。

この関数は、とまったく同じことをしないことに注意してくださいHttpUtility.HtmlDecode

編集:との違いについての質問に答えUrlDecodeUnescapeDataString

次のMSDNページを引用するにはUnescapeDataString

多くのWebブラウザーは、URI内のスペースをプラス( "+")文字にエスケープします。ただし、この動作はすべてのURIスキームで標準ではないため、UnescapeDataStringメソッドはプラス文字をスペースに変換しません。

UrlDecodeただし、これらを処理しますが、次のことを試してみると、異なる応答が得られます。

string a = Uri.UnescapeDataString(".Net+Framework"); //returns ".Net+Framework"
string b = HttpUtility.UrlDecode(".Net+Framework"); //returns ".Net Framework"

したがって、カバレッジを向上させるには、HttpUtility.UrlDecodeの方が適しているように思われます。

于 2012-10-15T15:12:42.103 に答える
3

HttpServerUtility.UrlDecodeはあなたが望むものです。

于 2012-10-15T15:13:01.450 に答える
2
var result = System.Web.HttpUtility.UrlDecode("name1=ABC&userId=DEF&name2=zyx&payload=%3cSTAT+xmlns%3axsi%3d%22http%3a%2f%2fwww.w3.org%2f2001%2fXMLSchema-instance%22%3e%3cREQ...");

与える

name1=ABC&userId=DEF&name2=zyx&payload=<STAT xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><REQ...

そして私はそれがあなたが望むものであることを期待しています。

于 2012-10-15T15:14:38.350 に答える