Content-Type字符集是否未从HttpResponseMessage中公开?

use*_*834 12 c# content-type httpclient character-encoding

我使用转换一些代码HttpWebRequestHttpClient.我遇到的一个问题是从内容类型响应头获取charset.

使用时HttpWebRequest,charset暴露在HttpWebResponse.CharacterSet属性中,就像这样

using (WebResponse response = await this.webRequest.GetResponseAsync())
{
     string characterSet = ((HttpWebResponse)response).CharacterSet;
Run Code Online (Sandbox Code Playgroud)

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

使用时HttpClient,ContentType标题中似乎缺少字符集.

这是我正在使用的代码HttpClient:

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

CharSet属性始终是null. HttpResponseMessage有一个Headers属性,但它不包含content-type标头. HttpResponseMessage.Content还有一个Headers属性,它似乎包含内容类型标题,但该标题显示"Content-Type: text/html"- 它没有charset部分.

HttpWebResponse对于相同的url 使用第一种方法,我得到Content-Type标头的charset部分.我错过了什么吗?

GEL*_*ELR 6

我一直想在HttpResponseMessage中发出字符集,并且由于您的问题是Google上的第一个问题,并且我在下面的几页中找到了答案,因此代码如下

        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());
Run Code Online (Sandbox Code Playgroud)


小智 5

你可以这样得到它:

var contentType = response.Content.Headers.GetValues("Content-Type").First();
Run Code Online (Sandbox Code Playgroud)


Dan*_*iel 1

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

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