ISO-8859编码发布请求内容C#

时间:2014-09-24 07:53:27

标签: c# .net http post webclient

我正在尝试使用编码为ISO-8859的参数在C#中发送POST请求。我正在使用此代码:

        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()之后或期间对字符串进行了某种额外的编码。

提前非常感谢你。

1 个答案:

答案 0 :(得分:1)

我检查了谷歌。根据另一个关于SO UTF32 for WebClient.UploadValues?(第二个答案)的问题,Webclient.UploadValues()确实编码自己。但是,它执行ASCII编码。您必须使用其他方法上传此内容,例如HttpWebRequest