我有时会在我的httpwebrequests上遇到一个奇怪的错误。
错误我得到:
ArgumentException was unhandled by user code
'' is not a supported encoding name.
我正在运行的代码:
try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Timeout = 3000;
request.ReadWriteTimeout = 3000;
request.Proxy = new WebProxy(p.ToString(), true);
response = (HttpWebResponse)request.GetResponse();
Encoding responseEncoding = Encoding.GetEncoding(response.CharacterSet);
using (StreamReader sr = new StreamReader(response.GetResponseStream(), responseEncoding))
{
if (response.StatusCode == HttpStatusCode.OK)
{
// do stuff
}
}
}
catch (WebException wexc1)
{
if (wexc1.Status == WebExceptionStatus.ProtocolError)
{
return false;
}
}
finally
{
if (response != null)
response.Close();
}
它一直都在发生,就像500个请求中的1个一样。感觉代码无法确定实际编码。但是我该如何处理?
该错误当前使应用程序崩溃
我假设异常被抛在线:
Encoding responseEncoding = Encoding.GetEncoding(response.CharacterSet);
作为一个快速建议,我建议将Encoding.UTF8
或response.ContentEncoding
设置为流的编码,而不是依赖response.CharacterSet()
。
targualet是一个WebName(例如Encoding.UTF8.WebName
),而不是编码的专有名称。
您是否明确设置了请求的编码?像
Response.Charset = "windows-1252";
WebRequest访问的页面中?如果Web服务器未明确设置字符,则并不总是一致的。
您还可以在字符为空并替换默认值的情况下检查案例,可能是" Windows-1252"或任何适用于Web服务器的编码。示例:
string charset = response.CharacterSet;
if charset == "")
{
charset = "windows-1252";
}
Encoding responseEncoding = Encoding.GetEncoding(charset);
对我来说,它可以工作
private string GetHtmlFromResponse(HttpWebResponse response)
{
string sFicha = null;
using (Stream s = response.GetResponseStream())
{
Encoding eCodificacion = Encoding.GetEncoding(response.CharacterSet);
StreamReader sr = new StreamReader(s, eCodificacion);
sFicha = sr.ReadToEnd();
sr.Close();
}
return sFicha;
}
我正在下载一个西班牙页面,而角色Á,é,í,ó,f,娜,ñ丢失了。使用此代码,我得到了正确的文字。