質問

Web サイトを呼び出してデータを取得する Windows クライアント アプリケーションを作成しようとしています。インストールを最小限に抑えるために、私はのみを使用しようとしています .NET Framework クライアント プロファイルの DLL. 。問題は、いくつかのパラメータを UrlEncode する必要があることです。クライアント Pofile の一部ではない System.Web.dll をインポートせずにこれを行う簡単な方法はありますか?

役に立ちましたか?

解決

System.Uri.EscapeUriString()は、特定の文字で問題となることが、私にとってそれは、文字列内の数字/シャープ「#」記号だっます。

それはあなたのために問題がある場合は、試してみてください。

System.Uri.EscapeDataString() //Works excellent with individual values

ここでの違いを説明してSOの質問の答えは次のとおりです。

EscapeUriStringとEscapeDataStringですか

と任意の態様にのUri.EscapeDataString() を使用することをお勧めします。

他のヒント

.Net 4.5以降では使用します WebUtility

書式設定のためだけに、これを回答として送信します。

それらを比較する良い例が見つからなかったので、次のようにします。

string testString = "http://test# space 123/text?var=val&another=two";
Console.WriteLine("UrlEncode:         " + System.Web.HttpUtility.UrlEncode(testString));
Console.WriteLine("EscapeUriString:   " + Uri.EscapeUriString(testString));
Console.WriteLine("EscapeDataString:  " + Uri.EscapeDataString(testString));
Console.WriteLine("EscapeDataReplace: " + Uri.EscapeDataString(testString).Replace("%20", "+"));

Console.WriteLine("HtmlEncode:        " + System.Web.HttpUtility.HtmlEncode(testString));
Console.WriteLine("UrlPathEncode:     " + System.Web.HttpUtility.UrlPathEncode(testString));

//.Net 4.0+
Console.WriteLine("WebUtility.HtmlEncode: " + WebUtility.HtmlEncode(testString));
//.Net 4.5+
Console.WriteLine("WebUtility.UrlEncode:  " + WebUtility.UrlEncode(testString));

出力:

UrlEncode:             http%3a%2f%2ftest%23+space+123%2ftext%3fvar%3dval%26another%3dtwo
EscapeUriString:       http://test#%20space%20123/text?var=val&another=two
EscapeDataString:      http%3A%2F%2Ftest%23%20space%20123%2Ftext%3Fvar%3Dval%26another%3Dtwo
EscapeDataReplace:     http%3A%2F%2Ftest%23+space+123%2Ftext%3Fvar%3Dval%26another%3Dtwo

HtmlEncode:            http://test# space 123/text?var=val&another=two
UrlPathEncode:         http://test#%20space%20123/text?var=val&another=two

//.Net 4.0+
WebUtility.HtmlEncode: http://test# space 123/text?var=val&another=two
//.Net 4.5+
WebUtility.UrlEncode:  http%3A%2F%2Ftest%23+space+123%2Ftext%3Fvar%3Dval%26another%3Dtwo

.Net 4.5以降では使用します WebUtility.UrlEncode

これは再現されるようです HttpUtility.UrlEncode (v4.0 より前) より一般的な文字の場合:
Uri.EscapeDataString(testString).Replace("%20", "+").Replace("'", "%27").Replace("~", "%7E")
注記: EscapeUriString 有効な URI 文字列を保持するため、できるだけ多くのプレーンテキスト文字が使用されます。

さまざまなエンコーディングを比較する表については、この回答を参照してください。
https://stackoverflow.com/a/11236038/555798

改行ここにリストされているすべて(以外) HttpUtility.HtmlEncode) 変換されます "\n\r" の中へ %0a%0d または %0A%0D

自由にこれを編集してテスト文字列に新しい文字を追加するか、コメントに残していただければ編集します。

あなたが使用することができます。

Uri.EscapeUriString(参照 http://msdn.microsoft .COM / EN-US /ライブラリ/ system.uri.escapeuristring.aspxする

ここでの答えはまだ私には不十分非常に良いですが、。

私は0から255までのすべての文字列のためのUri.EscapeUriStringUri.EscapeDataStringを比較し、小さなループを書いています。

注:両方の機能が内蔵されているインテリジェンスは0x80以上の文字が最初にUTF-8でエンコードされた後、%はエンコード

ということ。

ここでの結果は次のとおりです。

******* Different *******

'#' -> Uri "#" Data "%23"
'$' -> Uri "$" Data "%24"
'&' -> Uri "&" Data "%26"
'+' -> Uri "+" Data "%2B"
',' -> Uri "," Data "%2C"
'/' -> Uri "/" Data "%2F"
':' -> Uri ":" Data "%3A"
';' -> Uri ";" Data "%3B"
'=' -> Uri "=" Data "%3D"
'?' -> Uri "?" Data "%3F"
'@' -> Uri "@" Data "%40"


******* Not escaped *******

'!' -> Uri "!" Data "!"
''' -> Uri "'" Data "'"
'(' -> Uri "(" Data "("
')' -> Uri ")" Data ")"
'*' -> Uri "*" Data "*"
'-' -> Uri "-" Data "-"
'.' -> Uri "." Data "."
'_' -> Uri "_" Data "_"
'~' -> Uri "~" Data "~"

'0' -> Uri "0" Data "0"
.....
'9' -> Uri "9" Data "9"

'A' -> Uri "A" Data "A"
......
'Z' -> Uri "Z" Data "Z"

'a' -> Uri "a" Data "a"
.....
'z' -> Uri "z" Data "z"

******* UTF 8 *******

.....
'Ò' -> Uri "%C3%92" Data "%C3%92"
'Ó' -> Uri "%C3%93" Data "%C3%93"
'Ô' -> Uri "%C3%94" Data "%C3%94"
'Õ' -> Uri "%C3%95" Data "%C3%95"
'Ö' -> Uri "%C3%96" Data "%C3%96"
.....

EscapeUriString EscapeDataStringクッキーデータが予約文字'='';'が含まれていなければならないので、クッキーの内容例えば、エンコードするために使用されるが、符号化URLに使用される。

クライアントプロファイル使用可能なバージョン、System.Net.WebUtilityクラス、クライアントプロファイルSystem.dllの中に存在があります。ここでは、MSDNのリンクがあります:

WebUtilityする

はここで正しくapplication/x-www-form-urlencodedコンテンツタイプを使用してパラメータをエンコードPOSTリクエストを送信する例です

using (var client = new WebClient())
{
    var values = new NameValueCollection
    {
        { "param1", "value1" },
        { "param2", "value2" },
    };
    var result = client.UploadValues("http://foo.com", values);
}

にURLENCODEのSystem.Webを使用しない:

String s = System.Net.WebUtility.UrlEncode(str);
//fix some different between WebUtility.UrlEncode and HttpUtility.UrlEncode
s = Regex.Replace(s, "(%[0-9A-F]{2})", c => c.Value.ToLowerInvariant());

の詳細: ます。https://www.samnoble .co.uk / 2014/05/25 /注意-webutility-でurlencode-VS-httputility-でurlencode /

System.Net.WebUtility.HtmlDecode
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top