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

私にとっては、うまくいきます

    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 に答える
0

リクエストのエンコーディングを明示的に設定していますか? 何かのようなもの

Response.Charset = "windows-1252";

WebRequest によってアクセスされるページで? CharacterSet は、Web サーバーによって明示的に設定されていない場合、常に一貫しているとは限りません。

また、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.UTF8簡単なアドバイスとして、 orresponse.ContentEncodingをストリームのエンコーディングとして設定し、に依存しないことをお勧めしますresponse.CharacterSet()

CharacterSet は WebName (例: Encoding.UTF8.WebName) であり、エンコーディングの適切な名前ではありません。

于 2012-10-31T20:05:00.593 に答える