Я скачиваю страницу HTML, используя следующий код:HttpWebRequest: Получение ответа с правом кодирования
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
Это хорошо работает для большинства страниц, но для некоторых (например: www.gap.com), Я получаю ответ неправильно закодированным.
В gap.com, например, я получаю «" как "?"
И не говоря уже о том, что произойдет, если я попытаюсь загрузить google.cn ...
Что мне здесь не хватает, чтобы получить .Net, чтобы закодировать это право?
Мой худший страх в том, что мне действительно нужно будет прочитать метатег внутри HTML, который указал кодировку, а затем перечитать (перекодировать?) Весь поток.
Любые указатели будут оценены.
UPDATE:
Благодаря ответ Джон Сондерс, я немного ближе. Свойство HttpWebResponse.ContentEncoding кажется всегда пустым. Тем не менее, HttpWebResponse.CharacterSet кажется полезным, и с этим кодом, я получаю ближе:
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)
Теперь Google.cn приходит совершенно, со всеми китайскими иероглифами.
Однако Gap.Com все еще поступает неправильно.
Для Gap.com, HttpWebResponse.CharacterSet - ISO-8859-1, кодирование, которое я получаю через GetEncoding, - это {System.Text.Latin1Encoding}, в котором говорится: «ИСО-8859-1» в его имени, И тег META Content-Type в HTML указан «charset = ISO-8859-1».
Я все еще что-то не так?
Или GAP делает что-то неправильно?