httpwebrequest编码错误

时间:2012-10-31 19:49:20

标签: c# httpwebrequest

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

错误当前使应用程序崩溃

3 个答案:

答案 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.UTF8response.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;
    }

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