2015-04-04 3 views
2

Я пишу приложение C# для Windows Phone 8.1. Приложение отправляет HTTP-запрос на веб-страницу с пост-данными, однако он генерирует исключение, когда я копирую содержимое запроса в строку.Неверная кодировка в ответе HTTP

Вот код,

var values = new List<KeyValuePair<string, string>> 
    { 
     new KeyValuePair<string, string>("username", "usernameHere"), 
     new KeyValuePair<string, string>("password", "passwordHere"), 
    }; 

var httpClient = new HttpClient(new HttpClientHandler()); 
var response = await httpClient.PostAsync(new Uri(LOGIN_URL), new FormUrlEncodedContent(values)); 

if (response.IsSuccessStatusCode) 
{ 
    string responseString = ""; 

    try 
    { 
     responseString = await response.Content.ReadAsStringAsync(); 
    } 

    catch (Exception e) 
    { 
     MessageBox.Show("Exception caught " + e); 
    } 
} 

Ошибка,

«System.InvalidOperationException: Набор символов содержится в ContentType недействителен Не удается прочитать содержимое в строку, используя неверный . набор символов ---> System.ArgumentException: «ISO8859_1» не является поддерживаемым именем кодировки ».

Видимо решение использовать GetByteArrayAsync вместо PostAsync (How to change the encoding of the HttpClient response), но таким образом я не могу представить почтовые данные.

ответ

4

Видимо решение не использовать GetByteArrayAsync вместо PostAsync

Нет вы можете использовать ReadAsByteArrayAsync метод HttpContent класса

byte[] data = await response.Content.ReadAsByteArrayAsync(); 
0

Некоторые сервера ответ может иметь недопустимые кодировки, в данном случае ' ISO8859_1 'недействителен. Другим способом решения этой проблемы является изменение кодировки до правильного значения, перед чтением в виде строки:

responseMessage.Content.Headers.ContentType.CharSet = @"ISO-8859-1"; 
responseString = await response.Content.ReadAsStringAsync(); 
Смежные вопросы