HttpClient抛出System.ArgumentException异常:'windows-1251'不是受支持的编码名称。

4

我正在编写WinPhone 8.1应用程序。 代码非常简单,在大多数情况下都能正常工作:

string htmlContent;
using (var client = new HttpClient())
{
    htmlContent = await client.GetStringAsync(GenerateUri());
}
_htmlDocument.LoadHtml(htmlContent);

但有时会在此处抛出异常:

htmlContent = await client.GetStringAsync(GenerateUri());

内部异常 {System.ArgumentException: 'windows-1251' 不是受支持的编码名称。参数名:name 在 System.Globalization.EncodingTable.internalGetCodePageFromName(String name) 中 在 System.Globalization.EncodingTable.GetCodePageFromName(String name) 中
在 System.Net.Http.HttpContent.<>c__DisplayClass1.b__0(Task task)} System.Exception {System.ArgumentException}

HttpClient是否支持1251编码?如果不支持,我该如何避免此问题?或者这是目标页面的问题?还是我的某些做法有误?

1个回答

10

IBuffer形式获取响应,然后使用.NET编码类进行转换:

HttpClient client = new HttpClient();
HttpResponseMessage response = await client.GetAsync(uri);
IBuffer buffer = await response.Content.ReadAsBufferAsync();
byte[] bytes = buffer.ToArray();

Encoding encoding = Encoding.GetEncoding("windows-1251");
string responseString = encoding.GetString(bytes, 0, bytes.Length);

非常感谢,它起作用了!唯一的区别是:byte[] bytes = await response.Content.ReadAsByteArrayAsync(); - Kirill Lappo
@HarrySmith 或者更简单的方式 var bytes = await client.GetByteArrayAsync(uri); - Givi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接