【问题标题】:The character set provided in ContentType is invalidContentType 中提供的字符集无效
【发布时间】:2018-09-24 11:44:58
【问题描述】:

我用 async await 写了一些简单的代码,但是当我尝试运行它时,编译器会抛出一个System.InvalidOperationException

完整的错误信息是:

未处理的异常:System.InvalidOperationException:ContentType 中提供的字符集无效。无法使用无效字符集将内容读取为字符串。

System.ArgumentException:“ISO-8859-2”不是受支持的编码名称。有关定义自定义编码的信息,请参阅 Encoding.RegisterProvider 方法的文档。

代码:

class Program
{
    static async Task Main(string[] args) => await asyncDoItAsync();

    private static async Task<string> asyncDoItAsync()
    {
        HttpClient client = new HttpClient(); 
        Task<string> url = client.GetStringAsync("http://google.pl");

        while(!url.IsCompleted)
        {
            WhenWaiting();
        }

        string url_length  = await url;

        return url_length;
    }

    private static void WhenWaiting()
    {
        Console.WriteLine("Waiting ...");
        Thread.Sleep(90);
    }
}

【问题讨论】:

  • 我正在查看实际的问题,希望能尽快为您提供答案,但顺便说一句,不是 编译器 抛出异常。除了使用动态类型的情况(编译器的一部分在执行时有效地存在),任何 compiler 错误都会在您编译时出现,而不是在运行时出现。
  • 作为次要问题,您提供了一个示例很棒,但它可以简化 - 我有一个更简单的示例,它仍然可以演示问题。 ..你愿意我把它编辑成你的问题吗?
  • 预计 Accept-Charset: utf-8 标头会解决这个问题,但事实并非如此。嗯。

标签: c# .net-core


【解决方案1】:

GetStringAsync 似乎在响应中不支持 iso-8859,基本上你无能为力。所以你需要从 GetAsync 开始。请务必清除您现有的标题,否则它可能仍然会失败。以下适用于您提供的网址(尽管我使用的是 ISO-8859-1 而不是 2):

var client = new HttpClient();
client.DefaultRequestHeaders.Clear();
string s = null;
var result = await client.GetAsync("http://google.pl");
using (var sr = new StreamReader(await result.Content.ReadAsStreamAsync(), Encoding.GetEncoding("iso-8859-1")))
{
     s = sr.ReadToEnd();
}

【讨论】:

    【解决方案2】:

    在 .NET Core 中,并非所有代码页都默认可用。 See this answer here for details on how to enable more.

    基本上,从 Nuget 安装 System.Text.Encoding 和 System.Text.Encoding.CodePages 包,然后在运行任何 http 请求之前包含此行:

    Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-26
      • 1970-01-01
      • 2020-09-16
      • 1970-01-01
      • 2019-06-22
      • 2020-12-27
      • 1970-01-01
      • 2023-03-19
      相关资源
      最近更新 更多