我用 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);
}
}
Run Code Online (Sandbox Code Playgroud)
在 .NET Core 中,默认情况下并非所有代码页都可用。 有关如何启用更多功能的详细信息,请参阅此处的答案。
基本上,从 Nuget 安装 System.Text.Encoding 和 System.Text.Encoding.CodePages 包,然后在运行任何 http 请求之前包含此行:
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
Run Code Online (Sandbox Code Playgroud)
小智 7
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();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5808 次 |
| 最近记录: |