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' 不是受支持的编码名称的主要内容,如果未能解决你的问题,请参考以下文章
未设置 TransferEncodingChunked 时 HttpClient 抛出 OutOfMemory 异常
HttpClient.SendAsync 方法退出而不抛出异常