0

我有时在我的 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 个一样。感觉就像代码无法确定实际编码..但我将如何处理呢?

该错误当前使应用程序崩溃

4

3 回答 3

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);
于 2012-10-31T20:04:53.283 回答
0

我假设在该行中引发了异常:

Encoding responseEncoding = Encoding.GetEncoding(response.CharacterSet);

作为一个快速建议,我建议设置Encoding.UTF8response.ContentEncoding作为流的编码,而不是依赖response.CharacterSet().

CharacterSet 是 WebName(例如Encoding.UTF8.WebName),而不是编码的专有名称。

于 2012-10-31T20:05:00.593 回答
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;
    }

我正在下载一个西班牙语页面,字符 á、é、í、ó、ú、ñ 丢失了。使用此代码,我得到了正确的文本。

于 2013-08-07T21:30:51.310 回答