HttpWebRequest:使用正确的编码接收响应

2023-11-30

我当前正在使用以下代码下载 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”,并且内容-在 HTML 中键入 META 标记指定“charset=ISO-8859-1”。

我还是做错了什么吗?
还是GAP做错了什么?


我相信 HttpWebResponse 有一个 ContentEncoding 属性。在 StreamReader 的构造函数中使用它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HttpWebRequest:使用正确的编码接收响应 的相关文章

随机推荐