HttpWebResponse - 编码问题

4

我遇到了编码问题。当我获取网站的源代码时,出现以下情况:

enter image description here

我这样设置编码为UTF8:

StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
            string sourceCode = reader.ReadToEnd();

感谢您的帮助!

1
你确定从流中获取的数据是UTF8编码吗?看起来不是这样。 - Anton Semenov
我正在使用Firebug检查编码。内容类型:text/html; charset=UTF-8 - carck3r
我不得不用注释来添加Accept-Encoding头部。它有效。 - carck3r
4个回答

6

尝试使用指定的编码方式:

Encoding encoding;
try
{
    encoding = Encoding.GetEncoding(response.CharacterSet);
}
catch (ArgumentException)
{
    // Cannot determine encoding, use dafault
    encoding = Encoding.UTF8;
}

StreamReader reader = new StreamReader(response.GetResponseStream(), encoding);
string sourceCode = reader.ReadToEnd();

如果您正在以某种方式接受gzip,则可以尝试这个方法:(我自己没有尝试过,而且诚实地说,由于您的编码不是gzip,所以这并没有太多意义!)
request.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip,deflate");
request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;

谢谢,但它不起作用。它读取utf-8编码(System.Text.UTF8Encoding),但是有相同的两个字符... - carck3r
3
有点冒险,但你有没有收到 gzip 格式的数据? - ziya
顺便说一句,我使用了.AutomaticDecompression,当响应未编码时,它仍然可以正常工作。 - Bill Sambrone

4
我曾经遇到相同的问题,尝试了从源到结果更改编码,但是没有任何效果。最终,我找到了一个帖子,引导我找到了以下内容... 请看这里... .NET: 是否可以让 HttpWebRequest 自动解压缩 gzip 响应?

在检索请求的响应之前,您需要使用以下代码。

rqst.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip;

因为一旦我们使用了"accept-encoding 'gzip'或'deflate'",数据就会被压缩并转化成我们无法阅读的数据,所以我们需要对它们进行解压。


2

但是响应可能不是UTF-8编码的。您是否检查了响应对象的CharacterSet和ContentType属性,以确保使用正确的编码方式?

无论如何,这两个字符看起来像代码页437中的值为03和08的字符。在您的数据流中似乎有一些二进制数据。

我建议您在调试时使用Stream.Read将响应的前几个字节读入一个字节数组中,然后检查值以查看您得到了什么。


response.CharacterSet = "UTF-8"; response.ContentType = "text/html; charset=UTF-8"; - carck3r
当我进行调试时,我得到了这些值(256大小的数组):http://lulzimg.com/i19/2e6ee1.png - carck3r
那看起来对我来说像是二进制数据,特别是在开头。你原本期望接收什么? - Jim Mischel

0

请在您的代码中更改此行:

using (StreamReader streamReader = new StreamReader(stream, Encoding.GetEncoding(1251)))

这可能会对你有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接