C#:发送没有UTF-8编码的HTTP GET请求

时间:2012-09-05 14:02:59

标签: c# asp.net utf-8 httpwebrequest

我需要从C#向CLASSIC ASP服务发送HTTP GET请求。 该服务的构建方式是使用Windows-1255编码从QueryString解码数据,而不是标准的UTF-8。

似乎HttpWebRequest类总是用UTF-8编码GET数据,但它对我不起作用。有没有办法从C#发送HTTP GET请求,而GET数据是用不同的UTF-8编码编码的?

感谢。

2 个答案:

答案 0 :(得分:2)

您需要在获取请求中设置标题:

内容类型:文本/ XML;字符集=窗户-1255

HttpRequest r = new HttpRequest(.....);    
r.Headers.Add("Content-Type", "text/xml; Charset=windows-1255");

也许这篇文章也会有用:

Read non-english characters from http get request

答案 1 :(得分:0)

好的,我终于得到了答案。

首先,在标题中指定ContentType并不起作用。 如果目标URL包含非英文字母,则HttpWebRequest将始终使用UTF-8 + URLEncode来构建请求发送到的最终URI。

要使用与UTF-8不同的编码,我需要自己编码URL值(而不是像我预期的那样为HttpWebRequest提供必要的编码)。

以下构建HTTP GET URL的函数,而值使用任何请求的编码进行编码(而不是使用默认的UTF-8):

  string BuildData(NameValueCollection getData, Encoding enc)
    {
        StringBuilder urldata = new StringBuilder();
        for (int i = 0; i < getData.Count; i++)
        {
            if (i > 0) urldata.Append("&");
            urldata.Append(getData.Keys[i] + "=" + HttpUtility.UrlEncode(enc.GetBytes(getData[i])));
        }
        return urldata.ToString();
    }

HttpWebRequest可以与

之类的东西一起使用
"http://get-destination.com/submit?" + BuildData(keysAndValues, Encoding.GetEncoding(1255));

在这种情况下,HttpWebRequest获取已编码的URL,该URL不包含非英文字母,并保持原样。