2012-01-08 33 views
0

我連接到Web服務如下:web服務和編碼

HttpWebRequest req = (HttpWebRequest)WebRequest.Create(
    "http://mywebserviceaddress.com/attributes=someatt"); 
req.Method = "POST"; 
req.ContentType = "application/x-www-form-urlencoded"; 

using (StreamReader stIn = new StreamReader(
     req.GetResponse().GetResponseStream(),Encoding.UTF8)) 
{ 
     strResponse = stIn.ReadToEnd(); 
     return strResponse; 
} 

但是我與(可能)不良編碼的響應,從而其結果是,我的網頁上,我得到了以下問題:

encoding failure

我做錯了什麼或者是第三方Web服務問題?如何在沒有這些愚蠢問題的情況下得到答覆? 這裏的截圖,從調試器:

enter image description here

+2

該頁面的編碼是什麼?你如何得到迴應並將其放在頁面上? – Oded 2012-01-08 13:43:02

+0

我認爲這不是頁面編碼問題。當我調試代碼時,我的strResponse變量在該階段具有來自Web服務編碼錯誤的值。 – 2012-01-08 13:52:20

+0

在這種情況下聽起來很可能(你確實應該在問題中加入這些信息)。你確定你正在閱讀的流是UTF8嗎? – Oded 2012-01-08 13:54:34

回答

1

頁可能不是UTF8。它看起來像特殊字符使用ASCII字符的上半部分,所以它是某種舊字符集。將其作爲UTF8讀取會導致錯誤,因爲讀者不希望出現單字節特殊字符。

商店GetResponse()成可變和輸出的ContentTypeCharacterSet內容的結果。如果服務器正常工作,它將顯示此屬性中使用的字符集。然後,您可以在您的StreamReader中使用正確的字符集。

+0

我從GetResponse()獲得以下結果:ContentType =「text/xml」。我看到來自System.Net.HttpWebResponse的CharacterSet被設置爲:「ISO-8859-1」。這似乎是問題所在。是嗎? – 2012-01-08 14:51:41

+0

我明白了,我沒有看到那個屬性。所以響應的字符集是* ISO-8859-1 *。使用Encoding.GetEncoding(「ISO-8859-1」)而不是Encoding.UTF8。 – Yogu 2012-01-08 14:57:12

+0

對我來說這似乎很奇怪。我已經按照你的建議更改了編碼,但它有以下結果:「ruin jednego znajwiêkszychkompleks & oacute; wpa³acowo-ogrodowychstaro¿ytnoci,gdzie cesarz Hadrianspêdzi³ostatnie lata ycia。」 – 2012-01-08 15:12:36