Reputation: 627
I'm trying to learn about Async programming using VS2012 and its Async Await keyword. That is why i wrote this piece of code:
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);
}
The problem is that when i try to debug the application, it gives me an error with this message:
The character set provided in ContentType is invalid. Cannot read content as string using an invalid character set.
I guess this is because the website have some Swedish char, but i can't find how to change the encoding of the response. Anyone can guide me plz?
Upvotes: 17
Views: 37977
Reputation: 3232
In case you want a more generic method, following works in my UWP case in case someone has one with Unicode, would be great add the 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);
}
}
Upvotes: 8
Reputation: 4015
You may have to check the encoding options and get the correct one. Otherwise, this code should get you going with the response.
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;
}
Upvotes: 34
Reputation: 3001
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();
Upvotes: 0