【发布时间】:2009-08-15 05:07:32
【问题描述】:
我目前正在下载一个 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 中指定编码的元标记,然后重新读取(重新编码?)整个流。
任何指针将不胜感激。
更新:
感谢 John Saunders 的回复,我离我更近了一点。 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”,并且HTML 中的 Content-Type META 标记指定“charset=ISO-8859-1”。
我还是做错了什么吗?
还是 GAP 做错了什么?
【问题讨论】:
标签: encoding .net-2.0 httpwebrequest