"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, который отправляет результат в службу С#). Надеюсь, это кому-нибудь поможет.