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

C# ';UTF8';不是受支持的编码名称,c#,utf-8,spotify,C#,Utf 8,Spotify,所以我只是在玩Spotify的Web API,我试图访问我的热门曲目。虽然我遇到了一个问题,我已经尝试解决了几个小时了,但我找不到答案 当我尝试反序列化我的响应时,我得到以下错误: “UTF8”不是受支持的编码名称。有关定义自定义编码的信息,请参阅encoding.RegisterProvider方法的文档。 参数名称:name ContentType中提供的字符集无效。无法使用无效字符集将内容作为字符串读取 ContentType为application/json;字符集=UTF8 有什么想法

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

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

“UTF8”不是受支持的编码名称。有关定义自定义编码的信息,请参阅encoding.RegisterProvider方法的文档。 参数名称:name ContentType中提供的字符集无效。无法使用无效字符集将内容作为字符串读取

ContentType为
application/json;字符集=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;
}
私有静态HttpClient GetHttpClient()
{
HttpClientHandler handler=新的HttpClientHandler(){
AutomaticDecompression=DecompressionMethods.GZip | DecompressionMethods.Deflate
};
var httpClient=新的httpClient(处理程序);
httpClient.DefaultRequestHeaders.Add(“接受”、“应用程序/json”);
返回httpClient;
}
公共异步任务GetSelfTopAsync(字符串类型,字符串用户名)
{
var httpClient=GetHttpClient();
httpClient.DefaultRequestHeaders.Authorization=新的AuthenticationHeaderValue(“承载者”,GetAccessToken(用户名));
var sb=新的StringBuilder();
某人附加(ApiUrl);
sb.Append($“/me/top/{type}”);
var query=sb.ToString();
var response=wait httpClient.GetAsync(查询);
var spotifyResponse=JsonConvert.DeserializeObject(wait response.Content.ReadAsStringAsync());
返回响应;
}

您正在使用.net core吗

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

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

可以找到有关
codepagensencodingprovider.Instance
的更多信息。

问题应该是在调用
ReadAsStringAsync()
,而不是调用
ReadAsByteArrayAsync()
并解析为字符串时发生的响应头
内容类型的验证

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

那会有用的

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

不,我使用的是.NET 4.5@SephrSo,但事实并非如此。。。还有其他人吗?这修复了除以下内容之外的所有编码错误:System.ArgumentException:“iso-2022-cn”不是受支持的编码名称。有关定义自定义编码的信息,请参阅encoding.RegisterProvider方法的文档。“这解决了我在使用引发编码错误的外部.dll时收到的编码错误。修复了此处的问题。我认为这只是Spotify Web API中的一个错误,为此端点发送charset=UTF8而不是charset=utf-8。这里存档了:我通过解决了一个类似的问题。你可以事先阅读它,然后在将它交给反序列化程序之前修复错误……最好是实际检查你收到的字节中的“UTF8”字符串,以确保它是UTF-8,并且只在需要修复时修复它。还有
编码.WebName
,在这种情况下,这可能更准确:你让我的日子变得美好:)太好了,它成功了!!