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

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

我假设异常被抛在线:

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

作为一个快速建议,我建议将Encoding.UTF8response.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,娜,ñ丢失了。使用此代码,我得到了正确的文字。

相关内容

  • 没有找到相关文章

最新更新