現在、次のコードを使用して 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」と表示され、さらに Content- 「charset=ISO-8859-1」を指定したHTMLにMETAタグを打ち込みます。
私はまだ何か間違ったことをしていますか?
それとも GAP が何か間違ったことをしているのですか?