web-dev-qa-db-fra.com

'UTF8' n'est pas un nom de codage pris en charge

Je joue donc avec l'API Web de Spotify et j'essaie d'accéder à mes meilleurs morceaux joués. Bien que j'aie rencontré un problème que j'essaie de résoudre depuis quelques heures maintenant, mais je ne trouve pas de réponse.

Lorsque j'essaie de désérialiser ma réponse, j'obtiens l'erreur suivante:

'UTF8' n'est pas un nom de codage pris en charge. Pour plus d'informations sur la définition d'un encodage personnalisé, consultez la documentation de la méthode Encoding.RegisterProvider. Nom du paramètre: nom Le jeu de caractères fourni dans ContentType n'est pas valide. Impossible de lire le contenu sous forme de chaîne à l'aide d'un jeu de caractères non valide.

Le ContentType est application/json; charset=UTF8

Des idées?

Voici mon code de demande:

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;
}
14
Fredrik

Utilisez-vous le noyau .net?

Vous devrez ajouter le code suivant pour rendre les encodages disponibles dans le bureau .NET disponibles dans votre environnement:

System.Text.EncodingProvider provider = System.Text.CodePagesEncodingProvider.Instance;
Encoding.RegisterProvider(provider);

Plus d'informations sur CodePagesEncodingProvider.Instance peut être trouvé ici .

16
Simon Farshid

Le problème devrait être une validation de l'en-tête de réponse Content-Type, Qui se produit lorsque vous appelez ReadAsStringAsync(), si vous appelez ReadAsByteArrayAsync() à la place et que vous analysez la chaîne

(System.Text.Encoding.UTF8.GetString())

ça va marcher !!!

14
Lucas Micheleto

J'ai eu le même problème pendant que j'essayais d'obtenir une réponse de mon API qui est intégrée dans PHP en utilisant le service C #. Je pouvais résoudre le problème en changeant "charset = UTF8" en "charset =\"UTF-8 \" "du côté PHP (l'api qui envoie le résultat au service C #). J'espère que cela aide quelqu'un.

1
J_Mok