gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 07:09:14 29 4
gpt4 key购买 nike

我目前正在下载一个 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”,以及内容-在 HTML 指定的“charset=ISO-8859-1”中键入 META 标记。

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

最佳答案

Gap 的网站是错误的。具体问题是,他们的页面声称使用的是 Latin1 (ISO-8859-1) 编码,而该页面使用了在 ISO-8859-1 中无效的字符 #146。

但是,该字符在 Windows CP-1252 编码(ISO 8859-1 的超集)中有效。在 CP-1252 中,字符代码 #146 用于右引号字符。在今天 Gap.com 主页上的文本中,您会在“您会发现小码和小码”中看到这是一个撇号。

您可以阅读 http://en.wikipedia.org/wiki/Windows-1252更多细节。原来这种事情是网页上的常见问题,其中内容最初以 CP-1252 编码保存(例如从 Word 复制/粘贴)。

这里的故事寓意:始终将国际化文本作为 Unicode 存储在您的数据库中,并始终在您的 Web 服务器上以 UTF8 格式输出 HTML!

关于encoding - HttpWebRequest:使用正确的编码接收响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/638756/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com