& # 39; use utf8 # 39;不支持的编码名称

本文关键字:编码 utf8 use 不支持 | 更新日期: 2023-09-27 18:03:23

所以我只是在玩Spotify的Web API,我试图访问我播放的热门曲目。虽然我遇到了一个问题,我已经试图解决几个小时了,但我找不到答案。

当我试图反序列化我的响应时,我得到以下错误:

'UTF8'不是支持的编码名称。有关定义自定义编码的信息,请参阅encoding的文档。RegisterProvider方法。参数名称:name在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;
}

& # 39; use utf8 # 39;不支持的编码名称

你使用。net core吗?

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

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

关于CodePagesEncodingProvider.Instance的更多信息可以在这里找到

问题应该是响应头Content-Type的验证,当您调用ReadAsStringAsync()时发生,如果您调用ReadAsByteArrayAsync()并解析为字符串

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

会成功的!!

当我试图从PHP中使用c#服务构建的API中获得答案时,我遇到了同样的问题。我可以通过将"charset=UTF8"更改为PHP端的"charset='"UTF-8'"来解决这个问题(将结果发送到c#服务的api)。