2012-10-31 114 views
0

我的httpwebrequests有時會出現奇怪的錯誤。httpwebrequest編碼錯誤

錯誤即時得到:

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(); 
     } 

它doesent happend所有的時間它像1出500的請求。它感覺就像代碼無法確定實際的編碼..但我將如何處理這個?

該錯誤當前使應用程序崩潰

回答

0

我假設異常的行拋出:

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

作爲一個快速的建議,我建議設置Encoding.UTF8response.ContentEncoding作爲流的編碼,而不是依靠response.CharacterSet()

CharacterSet是一個WebName(例如Encoding.UTF8.WebName),不是編碼的專有名稱。

+0

完美! UTF-8工作:)謝謝一堆 – Jacqueline

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); 
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; 
    } 

我正在下載一個網頁西班牙和人物A,E,I,O,U,ñ丟失。通過這段代碼,我可以找到正確的文本。