'UTF8'不是受支持的编码名称

时间:2016-08-21 15:44:24

标签: c# utf-8 spotify

所以我只是在玩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;
}

3 个答案:

答案 0 :(得分:14)

您使用的是.net核心吗?

您需要添加以下代码,以便在您的环境中使用.NET桌面中的编码:

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

有关CodePagesEncodingProvider.Instance的更多信息,请here

答案 1 :(得分:11)

问题应该是响应标头Content-Type的验证,如果您拨打ReadAsStringAsync()并解析为字符串

,则会在您致电ReadAsByteArrayAsync()时发生
(System.Text.Encoding.UTF8.GetString())

那将会奏效!!!

答案 2 :(得分:1)

当我尝试从使用C#服务以PHP内置的API中获取答案时,我遇到了同样的问题。我可以通过在PHP端(将结果发送到C#服务的api)中将“ charset = UTF8”更改为“ charset = \” UTF-8 \””来解决此问题。希望这对某人有帮助。