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

Posted

技术标签:

【中文标题】HttpClient 抛出 System.ArgumentException:\'windows-1251\' 不是受支持的编码名称【英文标题】:HttpClient throws System.ArgumentException: 'windows-1251' is not a supported encoding nameHttpClient 抛出 System.ArgumentException:'windows-1251' 不是受支持的编码名称 【发布时间】:2015-07-26 14:22:05 【问题描述】:

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

string htmlContent;
using (var client = new HttpClient())

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

_htmlDocument.LoadHtml(htmlContent);

但有时会抛出异常

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

InnerException System.ArgumentException: 'windows-1251' 不是 支持的编码名称。参数名称:名称在 System.Globalization.EncodingTable.internalGetCodePageFromName(字符串 名称)在 System.Globalization.EncodingTable.GetCodePageFromName(字符串名称) 在 System.Net.Http.HttpContent.c__DisplayClass1.b__0(任务 任务) System.Exception System.ArgumentException

HttpClient 是否支持 1251 编码?如果没有,我该如何避免这个问题?还是目标页面问题?还是我做错了什么?

【问题讨论】:

【参考方案1】:

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(); @HarrySmith 或者更简单的var bytes = await client.GetByteArrayAsync(uri);

以上是关于HttpClient 抛出 System.ArgumentException:'windows-1251' 不是受支持的编码名称的主要内容,如果未能解决你的问题,请参考以下文章

无限超时的 HttpClient 抛出超时异常

HttpClient 抛出“发送请求时发生错误。”

未设置 TransferEncodingChunked 时 HttpClient 抛出 OutOfMemory 异常

HttpClient.SendAsync 方法退出而不抛出异常

Windows.Web.Http.HttpClient 抛出 COMException c#

C# HttpClient 在没有成功状态代码时抛出异常 [关闭]