doğru kodlama ile yanıt alma:HttpWebRequest: Şu anda aşağıdaki kodu kullanarak, bir HTML sayfası indiriyorum
Try
Dim req As System.Net.HttpWebRequest = DirectCast(WebRequest.Create(URL), HttpWebRequest)
req.Method = "GET"
Dim resp As Net.HttpWebResponse = DirectCast(req.GetResponse(), Net.HttpWebResponse)
Dim stIn As IO.StreamReader = New IO.StreamReader(resp.GetResponseStream())
Dim strResponse As String = stIn.ReadToEnd
''Clean up
stIn.Close()
stIn.Dispose()
resp.Close()
Return strResponse
Catch ex As Exception
Return ""
End Try
Bu çoğu sayfalarında iyi sonuç verir, ancak bazı (örn: www.gap.com), Yanıt yanlış kodlanmış olsun.
gap.com'da, örneğin, "" olarak "?"
Ve google.cn ...
Yüklemeye çalıştığınızda ne olacağını söylememe gerek yok. Bu kodu kodlamak için .Net'i almak için ne arıyorum?
En büyük korkum şudur ki, aslında kodlamada belirtilen HTML içindeki meta etiketi okumalı ve ardından tüm akışı yeniden okumalıyım (yeniden kodlamak mı?).
Herhangi bir işaretçi büyük takdir edilecektir.
GÜNCELLEME: John Saunders' yanıtına karşılık
sayesinde ben biraz daha yakın değilim. HttpWebResponse.ContentEncoding özelliği her zaman boş gibi görünüyor. Ancak, HttpWebResponse.CharacterSet kullanışlı görünüyor ve daha yakın bu kodla i alıyorum:
Dim resp As Net.HttpWebResponse = DirectCast(req.GetResponse(), Net.HttpWebResponse)
Dim respEncoding As Encoding = Encoding.GetEncoding(resp.CharacterSet)
Dim stIn As IO.StreamReader = New IO.StreamReader(resp.GetResponseStream(), respEncoding)
Şimdi Google.cn tüm çince karakterler ile mükemmel geliyor.
Ancak, Gap.Com hala yanlış geliyor.
Gap.com için, HttpWebResponse.CharacterSet, ISO-8859-1'dir, GetEncoding uygulamasından geçmekte olduğum Kodlama, "ISO-8859-1" ifadesini gövde adıyla anlatan {System.Text.Latin1Encoding} VE HTML’deki Content-Type META etiketinde "charset = ISO-8859-1" belirtildi.
Hala yanlış bir şeyler yapıyorum?
Yoksa GAP bir şeyler mi yapıyor?