如何更改HttpClient响应的编码

Dre*_*Net 10 c# asynchronous windows-8

我正在尝试使用VS2012及其Async Await关键字了解异步编程.这就是我写这段代码的原因:

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

    resultsTextBox.Text = get;
}

private async Task<string> GetResultsAsync(string uri)
{
    HttpClient client = new HttpClient();

    return await client.GetStringAsync(uri);
}
Run Code Online (Sandbox Code Playgroud)

问题是当我尝试调试应用程序时,它给出了一条错误消息:

ContentType中提供的字符集无效.无法使用无效字符集将内容读取为字符串.

我想这是因为该网站有一些瑞典字符,但我找不到如何更改响应的编码.任何人都可以指导我PLZ?

San*_*G B 23

您可能必须检查编码选项并获得正确的编码选项.否则,此代码应该让您继续响应.

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


Jua*_*llo 5

如果您想要更通用的方法,请在我的 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);
    }
}
Run Code Online (Sandbox Code Playgroud)