ich zur Zeit eine HTML-Seite bin herunterladen, mit dem folgenden Code:HttpWebRequest: Empfangen Antwort mit der richtigen Codierung
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
Das funktioniert gut für die meisten Seiten, aber für einige (zB: www.gap.com), Bekomme ich die Antwort falsch codiert.
In gap.com, zum Beispiel, bekomme ich "'" als "?"
Und nicht zu erwähnen, was passiert, wenn ich versuche, google.cn zu laden ...
Was fehlt mir hier, um zu bekommen .Net dieses Recht zu kodieren?
Meine schlimmste Befürchtung ist, dass ich tatsächlich das Meta-Tag innerhalb der HTML lesen muss, die die Codierung angegeben hat, und dann den gesamten Stream erneut lesen (neu codieren?).
Alle Zeiger werden sehr geschätzt.
UPDATE:
Dank John Saunders' Antwort, ich bin ein bisschen näher. Die Eigenschaft HttpWebResponse.ContentEncoding scheint immer leer zu sein. Allerdings HttpWebResponse.CharacterSet scheint nützlich, und mit diesem Code, ich bin immer näher:
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)
Jetzt Google.cn perfekt kommt, mit all den chinesischen Schriftzeichen.
Allerdings kommt Gap.Com immer noch falsch.
Für Gap.com, HttpWebResponse.CharacterSet ist ISO-8859-1, die Codierung Ich bin durch GetEncoding ist {System.Text.Latin1Encoding}, die sagt "ISO-8859-1" in seinem Namen ist, UND das META-Tag "Content-Type" im HTML-Code "charset = ISO-8859-1".
Mache ich immer noch etwas falsch?
Oder macht GAP etwas falsch?