"UTF8" не поддерживает имя кодировки
Итак, я просто играю с Spotify Web API, и я пытаюсь получить доступ к моим топ-трекам. Хотя я столкнулся с проблемой, которую я пытался решить в течение нескольких часов, но я не могу найти ответ.
Когда я пытаюсь десериализовать свой ответ, я получаю следующую ошибку:
'UTF8' не является поддерживаемым именем кодировки. Информацию об определении настраиваемой кодировки см. В документации по методу Encoding.RegisterProvider. Имя параметра: имя Недопустимый набор символов, указанный в ContentType. Невозможно прочитать содержимое как строку, используя недопустимый набор символов.
ContentType - application/json; charset=UTF8
Любые идеи?
Здесь мой код запроса:
private static HttpClient GetHttpClient()
{
HttpClientHandler handler = new HttpClientHandler() {
AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate
};
var httpClient = new HttpClient(handler);
httpClient.DefaultRequestHeaders.Add("Accept", "application/json");
return httpClient;
}
public async Task<SearchArtistResponse> GetSelfTopAsync(string type, string userName)
{
var httpClient = GetHttpClient();
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", GetAccessToken(userName));
var sb = new StringBuilder();
sb.Append(ApiUrl);
sb.Append($"/me/top/{type}");
var query = sb.ToString();
var response = await httpClient.GetAsync(query);
var spotifyResponse = JsonConvert.DeserializeObject<SearchArtistResponse>(await response.Content.ReadAsStringAsync());
return spotifyResponse;
}
Ответы
Ответ 1
Вы используете ядро .net?
Вам нужно будет добавить следующий код, чтобы сделать доступными кодировки на рабочем столе .NET в вашей среде:
System.Text.EncodingProvider provider = System.Text.CodePagesEncodingProvider.Instance;
Encoding.RegisterProvider(provider);
Более подробную информацию о CodePagesEncodingProvider.Instance
можно найти здесь.
Ответ 2
Проблема должна заключаться в проверке заголовка ответа Content-Type
, который возникает, когда вы вызываете ReadAsStringAsync()
, если вы вызываете ReadAsByteArrayAsync()
вместо этого и разбираете строку
(System.Text.Encoding.UTF8.GetString())
который будет работать!!!
Ответ 3
У меня была такая же проблема, когда я пытался получить ответ от своего API, который построен на PHP с использованием сервиса С#. Я мог бы решить эту проблему, изменив "charset = UTF8" на "charset = \" UTF-8\"" на стороне PHP (API, который отправляет результат в службу С#). Надеюсь, это кому-нибудь поможет.