Как изменить кодировку ответа HttpClient

Я пытаюсь узнать об асинхронном программировании с помощью VS2012 и его ключевого слова async Await. Вот почему я написал этот фрагмент кода: -

protected override async void OnNavigatedTo(NavigationEventArgs e)
    {
            var get = await GetResultsAsync("http://saskir.medinet.se");
            resultsTextBox.Text=get;
    }

    private async Task<string> GetResultsAsync(string uri)
    {
        var client = new HttpClient();
        var response = await client.GetStringAsync(uri);
        return response;
    }

проблема в том, что когда я пытаюсь отладить приложение, это дает мне ошибку с этим msg:- 'набор символов, предоставленный в ContentType, недействителен. Невозможно прочитать содержимое в виде строки, используя недопустимый набор символов". Я думаю, это потому, что на веб-сайте есть какой-то шведский символ, но я не могу найти, как изменить кодировку ответ. Кто-нибудь может вести меня plz?

3 ответов


возможно, Вам придется проверить параметры кодирования и сделать правильный. В противном случае, этот код должен получить ответ.

private async Task<string> GetResultsAsync(string uri)
    {
        var client = new HttpClient();
        var response = await client.GetByteArrayAsync(uri);
        var responseString = Encoding.Unicode.GetString(response, 0, response.Length - 1);
        return responseString;
    }

Если вы хотите более общий метод, следующие работы в моем случае UWP в случае, если у кого-то есть один с Unicode, было бы здорово добавить if:

var response = await httpclient.GetAsync(urisource);

if (checkencoding)
{
    var contenttype = response.Content.Headers.First(h => h.Key.Equals("Content-Type"));
    var rawencoding = contenttype.Value.First();

    if (rawencoding.Contains("utf8") || rawencoding.Contains("UTF-8"))
    {
        var bytes = await response.Content.ReadAsByteArrayAsync();
        return Encoding.UTF8.GetString(bytes);
    }
}

WinRT 8.1 C#

using Windows.Storage.Streams;
using System.Text;
using Windows.Web.Http;

// in some async function

Uri uri = new Uri("http://something" + query);
HttpClient httpClient = new HttpClient();

IBuffer buffer = await httpClient.GetBufferAsync(uri);
string response = Encoding.UTF8.GetString(buffer.ToArray(), 0, (int)(buffer.Length- 1));

// parse here

httpClient.Dispose();