我目前正在使用以下代码下载 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 中指定编码的元标记,然后重新读取(重新编码?)整个流。
任何指针将不胜感激。
更新:
感谢约翰桑德斯的回复,我更接近了。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-在指定的 HTML 中键入 META 标记“charset=ISO-8859-1”。
我还在做错什么吗?
还是 GAP 做错了什么?