【问题标题】:'UTF8' is not a supported encoding name“UTF8”不是受支持的编码名称
【发布时间】:2016-12-28 04:55:47
【问题描述】:

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

【问题讨论】:

  • 我认为这只是 Spotify Web API 中的一个错误,为此端点发送 charset=UTF8 而不是 charset=utf-8。它在这里归档:github.com/spotify/web-api/issues/291
  • 我通过specifying the proxy解决了一个类似的问题。
  • 您可以提前阅读它,然后在将其提供给反序列化器之前修复错误...

标签: c# utf-8 spotify


【解决方案1】:

您使用的是 .net 核心吗?

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

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

更多关于CodePagesEncodingProvider.Instance的信息可以在here找到。

【讨论】:

  • 不,我使用的是 .NET 4.5 @Sephr
  • 所以不是这样的......还有其他人吗?
  • 这修复了所有编码错误,除了: System.ArgumentException: ''iso-2022-cn' is not a supported encoding name。有关定义自定义编码的信息,请参阅 Encoding.RegisterProvider 方法的文档。'
  • 这解决了我在使用引发编码错误的外部 .dll 时收到的编码错误
  • 修复了这里的问题。
【解决方案2】:

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

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

会成功的!!!

【讨论】:

  • 可能最好实际检查您收到的字节中的“UTF8”字符串,以确保它意味着是 UTF-8,并且只有在需要时才修复它修复它。
  • 还有Encoding.WebName,在这种情况下可能更准确
  • 你成就了我的一天 :)
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 2012-11-13
    • 2014-08-07
    • 1970-01-01
    • 2022-11-30
    • 2015-12-04
    • 2020-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多