2015-09-09 32 views
6

System.Webを参照したくないクラスライブラリアセンブリでURLをエンコードする必要があります。 URLは機能しませんいくつかのスペース System.Net.WebUtility.UrlEncodeで+の代わりに%20を強制する方法

https://query.yahooapis.com/v1/public/yql?q=select * from yahoo.finance.quote where symbol in ("YHOO","AAPL")&format=json&diagnostics=true&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&callback= 

私はSystem.Net.WebUtility.UrlEncodeを(使用

)スペースは「+」に置き換えられているが含まれています。私はそれらを%20に置き換える必要があります

System.Webを参照せずにどうすれば実現できますか?

+4

'' + "は動作しません。なぜですか? '+'と '%20'は、URLエンコーディングを正しく解釈できるコードであれば、同じ方法で解釈する必要があります。 –

+0

http://stackoverflow.com/questions/1634271/url-encoding-the-space-character-or-20、http://stackoverflow.com/questions/2678551/when-to-encode-space-to-plus -Or-20 – stuartd

+0

Yahoo Financeのクエリ言語では、 "+"はスペース(%20)と同等と解釈されません。私は手動で両方の方法でURLを試しましたが、 "+"うまく動作しません。 – ChrisP

答えて

1

あなたはこれを行うことができます:

public static string MyUrlEncode(string value) 
{ 
    // Temporarily replace spaces with the literal -SPACE- 
    string url = value.Replace(" ", "-SPACE-"); 
    url = System.Net.WebUtility.UrlEncode(url); 

    // Some servers have issues with (and), but UrlEncode doesn't 
    // affect them, so we include those in the encoding as well. 
    return url.Replace("-SPACE-", "%20").Replace("(", "%28").Replace(")", "%29"); 
} 
11

あなたはURI文字列をエスケープSystemアセンブリからUri.EscapeUriStringを試みることができます。質問からの文字列の場合:

https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.quote%20where%20%20symbol%20in%20(%22YHOO%22,%22AAPL%22)&format=json&diagnostics=true&env=store%253A%252F%252Fdatatables.org%252Falltableswithkeys&callback= 
関連する問題