Я сейчас загружаю HTML-страницу, используя следующий код:
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}, которая в своем имени тела говорит «ISO-8859-1», И мета-тег Content-Type в HTML, указанный "charset = ISO-8859-1".
Я все еще делаю что-то не так?
Или GAP что-то делает не так?