我的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个一样。感觉代码无法确定实际编码..但我将如何处理?
错误当前使应用程序崩溃
答案 0 :(得分:0)
您是否明确设置了请求的编码?像
这样的东西Response.Charset = "windows-1252";
在WebRequest访问的页面中?如果未由Web服务器显式设置,则CharacterSet并不总是一致的。
您还可以检查CharacterSet为空时的情况并替换默认值,可能是'windows-1252'或您的Web服务器的任何适当编码。例如:
string charset = response.CharacterSet;
if charset == "")
{
charset = "windows-1252";
}
Encoding responseEncoding = Encoding.GetEncoding(charset);
答案 1 :(得分:0)
我假设行中引发了异常:
Encoding responseEncoding = Encoding.GetEncoding(response.CharacterSet);
作为快速建议,我建议将Encoding.UTF8
或response.ContentEncoding
设置为流的编码,而不是依赖response.CharacterSet()
。
CharacterSet是一个WebName(例如Encoding.UTF8.WebName
),而不是编码的正确名称。
答案 2 :(得分:0)
对我来说,它有效
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;
}
我正在下载一个西班牙语页面,人物á,é,í,ó,ú,ñ都丢失了。使用此代码,我得到正确的文本。