2014-09-24 65 views
0

我試圖在C#中發送一個POST請求,參數編碼爲ISO-8859。我使用此代碼:ISO-8859編碼後發送請求內容C#

 using (var wb = new WebClient()) 
     { 
      var encoding = System.Text.Encoding.GetEncoding("ISO-8859-1"); 

      var encodedText = System.Web.HttpUtility.UrlEncode("åæ ÆÆ øØ ø", encoding); 
      wb.Encoding = encoding; 

      wb.Headers.Add("Content-Type", "application/x-www-form-urlencoded"); 
      var data = new NameValueCollection(); 
      data["TXT"] = encodedText; 

      var response = wb.UploadValues(_url, "POST", data); 
     } 

我已經想通了,對於"åæ ÆÆ øØ ø"正確編碼的字符串是%E5%E6+%C6%C6++%F8%D8+%F8,調試時encodedText實際上是這個字符串,我可以看到。但是,當在fiddler中檢查原始請求時,我可以看到字符串如下所示:TXT=%25e5%25e6%2B%25c6%25c6%2B%25f8%25d8%2B%25f8。我猜想在撥打UploadValues()之後或期間,正在對字符串進行某種額外的編碼。

非常感謝你提前。

+0

我認爲你編碼你的文本兩次,首先通過使用UrlEncode進行編碼,然後通過在您的Web客戶端指定編碼。你可以嘗試沒有指定wb.Encoding或不使用UrlEncode? – Nzall 2014-09-24 07:57:06

+0

謝謝,我試圖帶走wb.Encoding,它不幸的給了相同的結果。 – 2014-09-24 08:03:22

+0

我想我知道會發生什麼。 wb.UploadValues自己做一個無證的編碼。雖然我不確定。你可以嘗試沒有任何編碼?編輯:我找到了另一個答案。我會通過鏈接更新答案。 – Nzall 2014-09-24 08:14:18

回答

1

我向谷歌搜索了這個。根據另一個問題在SO在UTF32 for WebClient.UploadValues?(第二個答案),Webclient.UploadValues()的確的確編碼自己。但是,它執行ASCII編碼。你必須使用另一種方法來上傳,如HttpWebRequest

+0

非常感謝!通過使用HttpClient而不是WebClient解決。非常奇怪,有些ASCII編碼至少在方法描述中沒有說明。 – 2014-09-24 08:34:18