2016-08-21 23 views
7

私はSpotifyのWeb APIで遊んでいるだけで、トップのトラックにアクセスしようとしています。私は問題に遭遇しましたが、私は数時間前に解決しようとしていましたが、答えが見つかりません。'UTF8'はサポートされているエンコーディング名ではありません

私は私の応答をデシリアライズしようとすると、私はfollwingエラーを取得する:

'UTF8' is not a supported encoding name. For information on defining a custom encoding, see the documentation for the Encoding.RegisterProvider method. Parameter name: name The character set provided in ContentType is invalid. Cannot read content as string using an invalid character set.

た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; 
} 
+0

これはSpotify Web APIのバグであり、このエンドポイントのcharset = utf-8の代わりにcharset = UTF8を送信すると思います。それはここに提出されています:https://github.com/spotify/web-api/issues/291 – jooon

+0

私は[プロキシの指定](https://stackoverflow.com/q/16526689/86967)で同様の問題を解決しました。 – nobar

+0

デシリアライザに渡す前にそれをあらかじめ読んでエラーを修正することができます... – Nyerguds

答えて

9

は、.NETのコアを使用していますか?

ご使用の環境で利用可能な.NETデスクトップでのエンコーディングが利用できるようにするには、次のコードを追加する必要があります。CodePagesEncodingProvider.Instance

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

詳細情報hereを見つけることができます。

+0

いいえ、.NET 4.5 @Sephrを使用しています – Fredrik

+0

これはそうではありません。 – Fredrik

4

あなたの代わりにReadAsByteArrayAsync()を呼び出し、文字列に

作業をつもりだろう
(System.Text.Encoding.UTF8.GetString()) 

を解析する場合、問題は、あなたがReadAsStringAsync()を呼び出すときに発生するレスポンスヘッダContent-Typeの検証する必要があります!

+0

はい、それはまさに私の仕事でした! –

+0

受け取ったバイトの "UTF8"文字列を実際に調べて、_meant_がUTF-8であることを確認し、修正が必要な場合にのみ修正してください。 – Nyerguds

関連する問題