【问题标题】:Is the Content-Type charset not exposed from HttpResponseMessage?Content-Type 字符集是否未从 HttpResponseMessage 公开?
【发布时间】:2013-10-05 15:08:34
【问题描述】:

我正在将一些代码从使用 HttpWebRequest 转换为 HttpClient。我遇到的一个问题是从内容类型响应标头中获取字符集。

当使用HttpWebRequest 时,字符集暴露在HttpWebResponse.CharacterSet 属性中,像这样

using (WebResponse response = await this.webRequest.GetResponseAsync())
{
     string characterSet = ((HttpWebResponse)response).CharacterSet;

您也可以从WebResponse.ContentType 属性或HttpWebResponse.Headers 中的内容类型标头获取它。

使用HttpClientContentType 标头中似乎缺少字符集。

这是我用于HttpClient 的代码:

using (HttpClient httpClient = new HttpClient(httpClientHandler))
{
    using (HttpResponseMessage httpResponseMessage = await httpClient.GetAsync(uri, HttpCompletionOption.ResponseContentRead))
    {
        charset = httpResponseMessage.Content.Headers.ContentType.CharSet;

CharSet 属性始终为nullHttpResponseMessage 有一个 Headers 属性,但它不包含内容类型标头。 HttpResponseMessage.Content 也有一个 Headers 属性,它似乎包含内容类型的标头,但该标头显示 "Content-Type: text/html" - 它没有字符集部分。

对相同的 url 使用带有 HttpWebResponse 的第一种方法,我得到了 Content-Type 标头的字符集部分。我错过了什么吗?

【问题讨论】:

    标签: c# character-encoding httpclient content-type


    【解决方案1】:

    我希望在 HttpResponseMessage 中发出字符集,因为您的问题是谷歌上的第一个问题,我在下面几页找到了答案,这里是代码

    httpResponseMessage.Content.Headers.ContentType = new MediaTypeHeaderValue("text/csv");
    httpResponseMessage.Content.Headers.ContentType.CharSet = Encoding.UTF8.HeaderName;
    httpResponseMessage.Content.Headers.Add("CodePage", Encoding.UTF8.CodePage.ToString());
    

    【讨论】:

      【解决方案2】:

      你可以这样得到它:

      var contentType = response.Content.Headers.GetValues("Content-Type").First());
      

      【讨论】:

        【解决方案3】:

        我相信从服务器返回的Content-Type 标头必须包含像'text/html;charset=UTF-8' 这样的“字符集”才能显示在CharSet 属性中。在 Fiddler (http://www.telerik.com/fiddler) 等工具中检查原始响应可能会有所帮助。

        感谢您帮助我找到 Content-Type 标头埋在 HttpResponseMessage 对象中的位置!

        【讨论】:

          【解决方案4】:

          HttpClient 故意不公开字符集。准确地说,它不能。它是异步的,因此当它连接到服务器时,它会等待响应。它不知道字符集或除 HttpResponseMessage 中的 TransferEncoding 之外的任何其他内容,它不包含除“chunk”或“zip”之外的任何内容。

          所以要获得响应正文的编码,我们应该将其读取到一个变量中,然后仔细查看。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2019-02-18
            • 2019-04-04
            • 2012-11-02
            • 1970-01-01
            • 2011-12-19
            • 2013-10-06
            • 1970-01-01
            相关资源
            最近更新 更多