【问题标题】:C#: Sending HTTP GET request without UTF-8 encodingC#:发送没有 UTF-8 编码的 HTTP GET 请求
【发布时间】:2012-08-30 06:43:28
【问题描述】:

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

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

谢谢。

【问题讨论】:

  • 可能最好的办法是展示您当前的代码以获得清晰的反馈。

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


【解决方案1】:

你需要在你的get请求上设置一个header:

内容类型:文本/xml;字符集=windows-1255

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

也许这篇文章也会有一些用处:

Read non-english characters from http get request

【讨论】:

    【解决方案2】:

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

    首先,在标头中指定 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 不包含非英文字母并保持原样。

    【讨论】:

      猜你喜欢
      • 2013-05-13
      • 2015-03-15
      • 2012-12-29
      • 2012-12-10
      • 2011-09-20
      • 2023-03-18
      • 2013-10-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多