web-dev-qa-db-ja.com

「UTF8」はサポートされているエンコーディング名ではありません

それで私はSpotifyのWeb APIをいじっているだけで、よく再生されるトラックにアクセスしようとしています。問題が発生しましたが、数時間解決しようとしていましたが、答えが見つかりません。

応答を逆シリアル化しようとすると、次のエラーが発生します。

「UTF8」はサポートされているエンコーディング名ではありません。カスタムエンコーディングの定義については、Encoding.RegisterProviderメソッドのドキュメントを参照してください。パラメータ名:name 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;
}
14
Fredrik

.netコアを使用していますか?

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

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

CodePagesEncodingProvider.Instanceの詳細については、 ここ を参照してください。

16
Simon Farshid

問題は、代わりにReadAsStringAsync()を呼び出して文字列に解析すると、ReadAsByteArrayAsync()を呼び出したときに発生する応答ヘッダーContent-Typeの検証であるはずです。

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

それはうまくいくでしょう!!!

14
Lucas Micheleto

C#サービスを使用してPHPに組み込まれているAPIから回答を取得しようとしたときに、同じ問題が発生しました。 PHP側(C#サービスに結果を送信するAPI)で "charset = UTF8"を "charset = \" UTF-8\""に変更することで問題を修正できます。これが誰かを助けることを願っています。

1
J_Mok