2013-09-29 6 views
6

Я конвертирую код с HttpWebRequest в HttpClient. Одна из проблем, с которой я столкнулась, - это получить кодировку из заголовка ответа типа содержимого.Является ли кодировка Content-Type не из HttpResponseMessage?

При использовании HttpWebRequest, кодировка подвергается в HttpWebResponse.CharacterSet собственности, как этот

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

Вы также можете добраться до него из 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; 

CharSet свойство всегда null. HttpResponseMessage имеет свойство Headers, но он не содержит заголовка содержимого. HttpResponseMessage.Content также имеет свойство заголовков, которое, как представляется, содержит заголовок содержимого, но этот заголовок показывает "Content-Type: text/html" - он не имеет части кодировки.

Используя первый подход с HttpWebResponse для того же URL-адреса, я получаю часть кодировки заголовка Content-Type. Я что-то упускаю?

+0

Эй, добро пожаловать к переполнению стека. FYI, вы можете печатать такие вещи, как 'HttpResponseMessage', путем добавления их в backticks' '. –

ответ

0

Я считаю, что заголовок Content-Type, возвращенный с сервера, должен содержать «charset», как 'text/html;charset=UTF-8', чтобы он отображался в собственности CharSet. Проверка исходного сигнала в инструменте, таком как Fiddler (http://www.telerik.com/fiddler), может помочь.

И спасибо, что помогли мне найти, где заголовок Content-Type был похоронен в объекте HttpResponseMessage!

0

HttpClient намеренно не раскрывает кодировку. Точно это не может. Он асинхронен, поэтому, когда он подключается к серверу, он ждет ответа. Он не знает о кодировке или чем-то еще, кроме TransferEncoding в HttpResponseMessage, который не содержит ничего, кроме «chunk» или «zip».

Чтобы получить кодировку тела ответа, мы должны прочитать его переменной и затем тщательно изучить.

0

Я искал испускать кодовую Внутри 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()); 
Смежные вопросы